【发布时间】:2014-06-04 19:42:27
【问题描述】:
我正在尝试使用原型在 Javascript 中模拟继承。
我有一个名为 Model 的函数和一个模型类型 => Item。
var Model = function() {
this.names = ["name1", "name2"];
}
Model.prototype.Item = function(args) {
this.init = function(item_name) {
this.names[0] = item_name; // ERROR: Cannot set property '0' of undefined
}
}
var m = new Model();
var i = new m.Item();
i.init("New Name"); // ERROR: Cannot set property '0' of undefined
如何从上面的init() 函数访问names 数组?
【问题讨论】:
-
这条线应该是失败的
var i = new Model.Item();。你是说(new Model).Item()还是new Model().Item()? -
抱歉,复制和粘贴问题。是
m.Item() -
在 Item 构造函数中放置一个
Console.log(this)。您会看到 this 指的是调用 new m.Item() 时创建的新对象,而不是调用new Model()时创建的对象。您已将 Item 实现为一个单独的类,该类恰好是 Model 原型对象的一个属性,而不是继承的类。子类无权访问其父类中的属性。 -
你想要什么继承?你想让 Model 从 Item 继承吗?
-
...您不需要在 JavaScript 中“模拟”继承。您只需要了解惯用的 JavaScript 继承是如何工作的。
标签: javascript inheritance multi-level