我正在玩 javascript 原型。我是新手,所以我有一个小问题。
我正在用这个article http://mckoss.com/jscript/object.htm作为指导。
我已经定义了产品和书籍。目的是什么Book.prototype.constructor = Book();
这。我想不通。无论有没有它,我都可以成功调用父构造函数。
Book.prototype = new Product;
Book.prototype.constructor = Book; // What's the purpose of this
这是我的 jsFiddlelink http://jsfiddle.net/hqy2M/6/
首先,new Product()
使用 Product 函数的所有原型变量创建一个对象。所以,通过设置Book.prototype = new Product()
, Book 继承了 Product 的所有原型变量。
你可能认为你也可以说:Book.prototype = Product.prototype
,但该解决方案无法按预期工作。 Book 的原型成为指向 Product 原型的指针,因此它不是副本。如果您要对 Book 的原型进行更改,那么它实际上会在 Product 的原型中进行更改,而这不是您想要的。
不久,new Product()
创建所有原型变量的副本。
但这种方法也有一个问题。如果您现在要创建一本新 Book,则会调用 Product 构造函数,而不是 Book 构造函数。要解决这个问题,您需要再次正确设置构造函数,它就会起作用:
Book.prototype.constructor = Book;
// Note: it's not Book(), but Book, it's a reference to the function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)