为什么这个Object.create()原型对象不能访问Constructor对象的属性?

时间:2016-02-02 06:08:37

标签: javascript class prototype new-operator

例如:

var Queue = function() {
    this.items = [];
};

Queue.prototype.enqueue = function(obj) {
    this.items.push(obj);
};

var queue = Object.create(Queue.prototype);
queue.enqueue('src');

返回:

Uncaught TypeError: Cannot read property 'push' of undefined(…)

然而,

var queue = new Queue();
queue.enqueue('src');

完全符合我的要求。在变量实例化中我是否缺少调用Object.create()的关键因素?或者Object.create()方法是否需要另一种模式来分配要传递给其原型对象的数组?

有人可以向我解释这个小细节,因为我理解为什么它似乎在我在网上找到的其他例子中起作用,除了我自己的...非常感谢!

3 个答案:

答案 0 :(得分:3)

Object.create会创建一个空对象,并且不会调用构造函数方法来初始化它。

您想使用m运算符。这就是为它做的。

答案 1 :(得分:1)

因为在第一种情况下,您创建的对象没有项目数组

答案 2 :(得分:1)

您通过for i in 1..counter loop DBMS_OUTPUT.PUT_LINE (emp_code||' '||emp_name); --EXIT WHEN CUR_VAL is null; end loop; END; / 创建对象并引用该构造函数的原型。当你这样做时,永远不会调用构造函数本身。 Object.create()不是魔术;你传递一个对象,它就是它使用的对象。您正在从构造函数传递原型对象,这是一个非常好的对象,但是没有什么能够导致构造函数本身被调用。