例如:
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()方法是否需要另一种模式来分配要传递给其原型对象的数组?
有人可以向我解释这个小细节,因为我理解为什么它似乎在我在网上找到的其他例子中起作用,除了我自己的...非常感谢!
答案 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()
不是魔术;你传递一个对象,它就是它使用的对象。您正在从构造函数传递原型对象,这是一个非常好的对象,但是没有什么能够导致构造函数本身被调用。