成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript中constructor屬性

ISherry / 2733人閱讀

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

constructor屬性

JavaScript中constructor屬性指向創(chuàng)建當(dāng)前對象的構(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] }
起源

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

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

hasOwnProperty方法是來判定對象是否包含指定名稱的屬性,不會向原型鏈搜索。要想搜索原型鏈可以用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í),如果沒有找到,則往原型上找。而Foo.prototype剛好有屬性constructor。

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

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

foo沒有constructor屬性,還是往原型Foo.prototype上找

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

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

用處

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

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

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/107377.html

相關(guān)文章

  • javascriptconstructor&&prototype

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

    huaixiaoz 評論0 收藏0
  • 講清楚之 javascript原形

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

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

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

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

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

    xiaotianyi 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<