創建了一個函數Shape,在他的prototype上寫了一個name屬性和toString方法,接著輸出Shape的name屬性和調用toString方法。然后new一個Shape的實例——Triangle,分別輸出Triangle的name屬性和調用toString方法,結果如下:varShape=function(){};Shape.prototype.name='Shape';Shape.prototype.toString=function(){returnthis.name;}console.log(Shape.name);//''console.log(Shape.toString());//function(){}varTriangle=newShape();console.log(Triangle.name);//'Shape'console.log(Triangle.toString());//'Shape'記得new操作完成了兩件事:1.將this指向實例2.將實例的__proto__或者說[[prototype]]指向構造函數的prototype屬性。(有不對和漏的地方請補充?。┻@樣可以理解實例函數去__proto__中查找name屬性和toString()方法。而構造函數似乎直接去爬原型鏈了,為什么它不先在自身的屬性中查找呢?試著給Triangle的prototype加一個同名屬性和方法:Triangle.prototype={};//這里還有一個疑問,new出來的對象//沒有prototype屬性,是因為函數要作為構造函數//所以內置了prototype屬性么?Triangle.prototype.name='Triangle';Triangle.prototype.toString=function(){return'Iam'+this.name;}console.log(Triangle.name);//'Shape'console.log(Triangle.toString());//'Shape'嘛...和構造函數一個德行,求解惑~謝謝!
JS面向對象的new操作
HUX布斯
2019-04-13 08:45:26