作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在看这篇关于 node.js 事件模块的文章:
http://www.sitepoint.com/nodejs-events-and-eventemitter/
里面有这段代码:
Door.prototype.__proto__ = events.EventEmitter.prototype;
这应该将 Door 对象的原型(prototype)设置为 event.EventEmitter 的原型(prototype)。
我相信我知道什么是 difference between prototype and proto但是这段代码让我很困惑。所以我的问题是是否不使用:
Door.prototype.__proto__ = events.EventEmitter.prototype;
文章的作者不是只用了这行代码:
Door.prototype= events.EventEmitter.prototype;
最佳答案
这段代码
Door.prototype.__proto__ = events.EventEmitter.prototype
使 Door.prototype
继承自 events.EventEmitter.prototype
。
所以原型(prototype)链会是这样的
doorInstance -> Door.prototype -> events.EventEmitter.prototype
这种方法类似于
Door.prototype = Object.create(events.EventEmitter.prototype)
不同的是修改[[Prototype]]不会创建新的对象,但是对性能有很大的负面影响。
相反,这段代码
Door.prototype = events.EventEmitter.prototype
使 Door
实例直接继承自 events.EventEmitter.prototype
。
也就是说,您将无法在 Door.prototype
中添加特定方法而不污染 events.EventEmitter.prototype
。
关于javascript - 设置 Object.prototype.__proto__ 而不仅仅是 Object.prototype?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31474864/
我是一名优秀的程序员,十分优秀!