摘要:前言為了方便,大部分人都是直接使用字面量來初始化對象,我們知道原型對象是創(chuàng)建函數(shù)自帶的,如果使用字面量來初始化相當于重寫原型對象,這樣就會導致一些如下問題。
前言
為了方便,大部分人都是直接使用字面量來初始化對象,我們知道原型對象是創(chuàng)建函數(shù)自帶的,如果使用字面量來初始化相當于重寫原型對象,這樣就會導致一些如下問題。
正文問題:
重寫之后,原型對象的constructor不在指向原型對象所在的函數(shù)
function demo1 () { } demo1.prototype = { show: function() {console.log("execute success!")} } demo1.prototype.constructor不再指向demo1
既然有了問題,那自然有解決問題的方法
方法就是讓構(gòu)造函數(shù)重新指向原先得對象 function demo1 () {} demo1.prototype = { constructor: demo1, show: function() {console.log("execute success!")} }
但是這樣寫又有了新問題,[[Enumerable]]默認是true,而原先的構(gòu)造函數(shù)默認是false,這時候我們可以修改對象的屬性,修改對象的屬性自然要用到強大的defineProperty啦
function demo1 () {} demo1.prototype = { show: function() {console.log("execute success!")} } Object.defineProperty(demo1.prototype, "constructor", { enumerable: false, value: demo1 })
好啦,大功告成,就是這樣啦
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/96594.html
摘要:原型對象的共享特性,可以很方便的為一些內(nèi)置的對象擴展一些方法,比如,數(shù)組去重復但是,不要隨便往內(nèi)置的對象上面擴展方法,在多人協(xié)作開發(fā),很容易產(chǎn)生覆蓋,以及污染 我們先來一個簡單的構(gòu)造函數(shù)+原型對象的小程序 1 function CreateObj( uName, uAge ) { 2 this.userName = uName; 3 ...
摘要:所以,可以創(chuàng)建自定義的構(gòu)造函數(shù),從而定義自定義對象類型的屬性和方法。如對于構(gòu)造函數(shù)原型屬性以及實例之間的關(guān)系,參見高級程序設計一書中第章節(jié)。穩(wěn)妥構(gòu)造函數(shù)模式穩(wěn)妥對象,指的是沒有公共屬性,且其方法也不引用的對象如 創(chuàng)建對象 Object 構(gòu)造函數(shù)或?qū)ο笞置媪慷伎梢杂脕韯?chuàng)建單個對象。但這個方法的缺點非常明顯:同一個接口創(chuàng)建很可耐多對象會產(chǎn)生大量的重復代碼。為了解決這個問題,人們開始使用工廠...
摘要:上一章我們談了構(gòu)造函數(shù),他的唯一特點就是比較了地址不相同,因為大家知道引用類型是比較的引用。也就是說不用在構(gòu)造函數(shù)中定義對象實例,而是直接將這些添加到原型當中。如果構(gòu)造函數(shù)實例里面沒有,就去原型里面查找,如果有就立即返回。 上一章我們談了構(gòu)造函數(shù),他的唯一特點就是比較了地址不相同,因為大家知道引用類型是比較的引用。我們來談談原型。 原型 我們每創(chuàng)建一個函數(shù)都有一個原型(prototyp...
摘要:使用時,會自動創(chuàng)建對象,其類型為構(gòu)造函數(shù)類型,指向?qū)ο髮嵗鄙訇P(guān)鍵字,指向全局對象。構(gòu)造函數(shù)本身也具有屬性指向原型對象。 在JavaScript面向?qū)ο缶?一)中講解了一些與面向?qū)ο笙嚓P(guān)的概念和方法,這篇講講原型和繼承。 構(gòu)造函數(shù)和原型對象 構(gòu)造函數(shù)也是函數(shù),用new創(chuàng)建對象時調(diào)用的函數(shù),與普通函數(shù)的一個區(qū)別是,其首字母應該大寫。但如果將構(gòu)造函數(shù)當作普通函數(shù)調(diào)用(缺少new關(guān)鍵字...
摘要:構(gòu)造函數(shù)與原型組合利用構(gòu)造函數(shù)都是實例屬性和原型的共享特性,分別定義對應的內(nèi)容,組合共同完成對象創(chuàng)建,而且該模式還支持想構(gòu)造函數(shù)傳遞參數(shù)。引用類型為實例屬性寄生構(gòu)造模式構(gòu)造函數(shù)在不反回值的情況下,默認會返回新對象實例。 創(chuàng)建對象 1.1 通過Object對象創(chuàng)建 var person = new Object(); person.name = Albert; person.sayNam...
閱讀 3526·2021-09-08 09:36
閱讀 2695·2019-08-30 15:54
閱讀 2414·2019-08-30 15:54
閱讀 1822·2019-08-30 15:44
閱讀 2446·2019-08-26 14:04
閱讀 2491·2019-08-26 14:01
閱讀 2936·2019-08-26 13:58
閱讀 1415·2019-08-26 13:47