js重寫原型對象


首先看兩段很相似的代碼:

1.

function Person(){}
    
    Person.prototype = {
        constructor:Person,
        name:"Nic",
        age:"29",
        sayName:function(){
            alert(this.name)
        }
    };
    var friend1 = new Person();    //實例在這里
    
    friend1.sayName();

2.

function Person(){}

    var friend2 = new Person();    //實例在這里
    Person.prototype = {
        name : "aty",
        sayName:function(){
            alert(this.name);
        }
    };

    friend2.sayName();

兩個例子都是重寫了原型對象,但是實例創建的順序直接導致了倆個輸出的結果。

第一個彈出 “Nic”,而第二個會報錯TypeError: friend2.sayName is not a function” !!!

兩端代碼唯一的區別就是實例在原型對象重寫之前還是之后。

第一段重寫后再創建實例,此時實例指向改寫后的原型對象,所以能調用到原型中的sayName()。

第二段創建實例后再重寫,此時實例還是指向剛開始的原型對象。重寫原型對象后會將 之前原型對象 的屬性和方法全部清除,所以實例訪問不到sayName()。

 

另外讀《JavaScript高級程序設計(第3版)》中156頁與157頁,分別是:

“實例中的指針僅指向原型,而不是指向構造函數”。

“重寫原型對象切斷了現有原型與任何之前已經存在的對象實例之間的關系;它們引用的仍然是最初的原型”。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM