亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

JavaScript中constructor屬性

ISherry / 2764人閱讀

摘要:屬性中屬性指向創(chuàng)建當(dāng)前對(duì)象的構(gòu)造函數(shù)。既然是屬性時(shí)從屬于構(gòu)造函數(shù)的那么為什么實(shí)例也有屬性呢,這是為什么原因如下本身還是實(shí)例的原型。

constructor屬性

JavaScript中constructor屬性指向創(chuàng)建當(dāng)前對(duì)象的構(gòu)造函數(shù)。

var a = "zuckjet";
console.log(a.constructor)  // ? String() { [native code] }

function b() {}
console.log(b.constructor)  // ? Function() { [native code] }

var c = {name: "zuckjet"};
console.log(c.constructor);  //? Object() { [native code] }
起源

看了上面的代碼示例,也許你會(huì)覺(jué)得constructor屬性在對(duì)象里,但其實(shí)constructor屬性是在原型里。

function test() {}
var obj = new test();
console.log(obj.hasOwnProperty("constructor")); //false
console.log(obj.__proto__.hasOwnProperty("constructor")); //true

hasOwnProperty方法是來(lái)判定對(duì)象是否包含指定名稱(chēng)的屬性,不會(huì)向原型鏈搜索。要想搜索原型鏈可以用in關(guān)鍵字(’constructor’ in obj)。

既然是constructor屬性時(shí)從屬于構(gòu)造函數(shù)的prototype,那么為什么實(shí)例也有constructor屬性呢?

function Foo() {}
var foo = new Foo()
foo.constructor === Foo // true,這是為什么

原因如下:

Foo.prototype本身還是實(shí)例foo的原型。

由于原型鏈機(jī)制,當(dāng)在foo中查找屬性constructor時(shí),如果沒(méi)有找到,則往原型上找。而Foo.prototype剛好有屬性constructor。

foo.constructor的值就是Foo.prototype.constructor的值,也就是Foo。

constructor屬性是不可靠的
function Foo() {}
Foo.prototype = {}
var foo = new Foo()
foo.constructor === Object  // true,可以看出不是Foo了

foo沒(méi)有constructor屬性,還是往原型Foo.prototype上找

Foo.prototype本來(lái)是有constructor屬性的,但是在這里它已經(jīng)被重新定義變成{}

找不到constructor,接著往原型鏈上查找。({}是由Object構(gòu)造函數(shù)生成的,它的原型是Object.prototype)找到了Object.prototype,含有屬性constructor,值為Object

用處

為了將實(shí)例的構(gòu)造器的原型對(duì)象暴露出來(lái), 比如你寫(xiě)了一個(gè)插件,別人得到的都是你實(shí)例化后的對(duì)象, 如果別人想擴(kuò)展下對(duì)象,就可以用 instance.constructor.prototype 去修改或擴(kuò)展原型對(duì)象

部分內(nèi)容參考自:
參考鏈接1
參考鏈接2

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/107377.html

相關(guān)文章

  • javascriptconstructor&&prototype

    摘要:于是退而求其次叫為類(lèi)的構(gòu)造函數(shù)。如果這個(gè)函數(shù)被用在創(chuàng)建自定義對(duì)象的場(chǎng)景中,我們稱(chēng)這個(gè)函數(shù)為構(gòu)造函數(shù)。遇到的問(wèn)題始終指向創(chuàng)建當(dāng)前對(duì)象的構(gòu)造函數(shù)。 Object.constructor,prototype 對(duì)象的prototype和constructor是兩個(gè)重要的屬性,他們總是成對(duì)出現(xiàn),提到constructor的地方,不得不涉及到另外一個(gè)非常重要的屬性prototype,它是js中基于...

    huaixiaoz 評(píng)論0 收藏0
  • 講清楚之 javascript原形

    摘要:構(gòu)造函數(shù)和實(shí)例都通過(guò)屬性指向了原形。代碼示例是構(gòu)造函數(shù)的實(shí)例的屬性與的屬性保存的值相等,即他們指向同一個(gè)對(duì)象原形。 講清楚之javascript原型 標(biāo)簽: javascript javascript 中原形是一個(gè)比較難于理解的概念。javascript 權(quán)威指南在原形這一章也花了大量的篇幅進(jìn)行介紹,也許你已經(jīng)讀過(guò)javascript 權(quán)威指南,或者已經(jīng)是讀第N篇了,然而這篇文章的目...

    高勝山 評(píng)論0 收藏0
  • 我來(lái)重新學(xué)習(xí) javascript 的面向?qū)ο螅╬art 2)

    摘要:先來(lái)說(shuō)其實(shí)構(gòu)造函數(shù)也有,原型對(duì)象有,實(shí)例有也有,或者更加籠統(tǒng)的說(shuō),所有對(duì)象都是有的。構(gòu)造函數(shù)的原型對(duì)象上的會(huì)指向構(gòu)造函數(shù)。由于屬性是可以變更的,所以未必真的指向?qū)ο蟮臉?gòu)造函數(shù),只是一個(gè)提示。 續(xù)上一集內(nèi)容,通過(guò)構(gòu)造函數(shù)的方式,成功地更新了生產(chǎn)技術(shù),老板笑呵呵,工人少奔波,只是問(wèn)題總比辦法多,又遇到一個(gè)新問(wèn)題,就是會(huì)造成一些資源的重復(fù)和浪費(fèi),那么經(jīng)過(guò)工程師們的智慧交流,他們產(chǎn)生了一個(gè)新技...

    silvertheo 評(píng)論0 收藏0
  • javascript高級(jí)程序設(shè)計(jì)》第六章 讀書(shū)筆記 之 javascript對(duì)象的幾種創(chuàng)建方式

    摘要:三種使用構(gòu)造函數(shù)創(chuàng)建對(duì)象的方法和的作用都是在某個(gè)特殊對(duì)象的作用域中調(diào)用函數(shù)。這種方式還支持向構(gòu)造函數(shù)傳遞參數(shù)。叫法上把函數(shù)叫做構(gòu)造函數(shù),其他無(wú)區(qū)別適用情境可以在特殊的情況下用來(lái)為對(duì)象創(chuàng)建構(gòu)造函數(shù)。 一、工廠(chǎng)模式 工廠(chǎng)模式:使用字面量和object構(gòu)造函數(shù)會(huì)有很多重復(fù)代碼,在此基礎(chǔ)上改進(jìn)showImg(https://segmentfault.com/img/bVbmKxb?w=456&...

    xiaotianyi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<