创建了一个函数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'嘛...和构造函数一个德行,求解惑~谢谢!
梦里花落0921
相关分类