这个mixins代码是书中的错误吗;面向对象JavaScript的原理”;
is this mixins code an error of book "The Principles of Object-Oriented JavaScript"
在"mixins"一章中,有一个示例代码
function mixin(receiver, supplier) {
for (var property in supplier) {
if (supplier.hasOwnProperty(property)) {
receiver[property] = supplier[property]
}
}
return receiver;
}
function EventTarget(){
}
EventTarget.prototype = {
add: function(){console.log("add");}
};
function Person(name) {
this.name = name;
}
mixin(Person.prototype, new EventTarget());
mixin(Person.prototype, {
constructor: Person,
sayName: function() {
console.log(this.name);
this.fire({ type: "namesaid", name: name });
}
});
var person = new Person("Nicholas");
据我所知,这是试图将属性从EventTarget.prototype复制到Person.prototype中
mixin(Person.prototype, new EventTarget());
应该是
mixin(Person.prototype, EventTarget.prototype);
这段代码我说得对吗?
是的,这(可能)是一个错误。
(自定义)EventTarget
构造函数定义为
function EventTarget(){
// No property assigned to `this`
}
EventTarget.prototype = {
add: function(){console.log("add");}
};
因此,EventTarget
实例将从EventTarget.prototype
继承add
方法,但不会有任何自己的属性。
然而,函数mixin
只分配自己的属性:
function mixin(receiver, supplier) {
for (var property in supplier)
if (supplier.hasOwnProperty(property)) // <--
receiver[property] = supplier[property]
return receiver;
}
因此,以下代码对没有任何作用
mixin(Person.prototype, new EventTarget());
根据作者Nicholas Zakas的说法,是的,这确实是一个错误,应该是:
mixin(Person.prototype, EventTarget.prototype);
他在谷歌群组的帖子中这样说。
相关文章:
- 面向对象的Javascript代码在IE7中不起作用
- 面向对象JavaScript中的私有函数
- 面向对象,控制器问题,初学者Javascript
- 面向对象的 JavaScript 共享方法变量
- JavaScript中面向对象DOM操作的混乱混乱
- 尝试使用面向对象的javascript和AJAX
- 如何使用面向对象的 javascript 从控件调用函数
- JavaScript 面向对象的调用函数内部函数或调用函数 insede var
- 这个mixins代码是书中的错误吗;面向对象JavaScript的原理”;
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- Euler项目#1的面向对象Javascript函数
- Node.js和面向对象Javascript
- 面向对象javascript:用self函数调用初始化一个属性
- 在面向对象JavaScript中获取/设置
- 删除面向对象JavaScript中的eventListener
- 面向对象和非面向对象javascript的区别
- 使用面向对象Javascript、ThreeJS和ScrollMagic的Web工作者
- 面向对象Javascript /变量声明/性能
- 异步、回调和面向对象JavaScript:我该如何组织它们?
- 关于面向对象javascript的困惑