b.__proto__
指向的是 Object.prototype
every JavaScript function (except functions returned by the ECMAScript 5 Function.bind() method) automatically has a prototype property. The value of this property is an object that has a single nonenumerable constructor property. The value of the constructor property is the function object.
---David Flanagan. “JavaScript: The Definitive Guide.” iBooks.
Employee
是个函数Employee.prototype
是 object,并有一个construct function就是其本身Employee.__proto__
为function() {}
Manager.prototype
只是一个原型为Employee.prototype
的objectB.prototype = new A();
方式,会报上图的错误,你需要改成B.prototype = new A("");
的方式,比较繁琐B.prototype = new F();
的方式继承 ,不会出现上图中的错误,可以把它封装成函数,方便使用可以看上面第二种方式 B.prototype.constructor = B;
, 看到这句刚开始有点不理解:
我的想法是, F.prototype = A.prototype; B.prototype = new F();
,这句让 B.prototype
为 A.prototype
原型的一个对象,而一个A.prototype
原型的对象,继承成了一个construct function的方法,那使用 B.prototype.constructor = B;
不是把 prototype chain 上的construct function 给修改了吗?
其实不是的。
从下面代码可以看出,从javascript对象取属性值时,会一次从prototype chain上找。但是给一个新属性赋值时,直接在本对象添加,而不是更改prototype chain上的值
![Uploading aa 跟 aa.proto同名属性 chrome_074940.png . . .]
2024 - 快车库 - 我的知识库 重庆启连科技有限公司 渝ICP备16002641号-10
企客连连 表单助手 企服开发 榜单123