在下面的代码中,我声明了两个对象,其中一个对象继承了另一个对象的属性和功能。
我想使用super
变量来调用我继承的对象的方法。当我追踪itemEditor
时,我可以正确地看到函数及其方法。当我尝试访问itemEditor
的方法时,它会返回undefined
。
我做错了什么?有更好的方法吗?
var myObject = {
itemEditor : function (vars) {
this.editItem = function () {
alert("Editing Item");
}
},
recurringItemEditor : function (vars) {
myObject .itemEditor.apply(this, [vars]);
this.prototype = myObject.itemEditor.prototype;
var super = myObject.itemEditor
this.editItem = function () {
console.log("fn.recurringItemEditor.editItem");
console.log(super);
console.log(super.editItem);
super.editItem.call(this);
}
}
答案 0 :(得分:1)
您的代码似乎有点困惑。一方面,myObject.itemEditor是一个构造函数,因此是一个函数(myObject.itemEditor.apply(this, [vars])
),另一方面,您将其视为具有原型(this.prototype = myObject.itemEditor.prototype;
)的对象。
甚至没有考虑super
是保留关键字。
您的示例可能正在简化您尝试执行的操作,但我不明白您为何不使用通常的原型继承。这样你就可以在你的本地实例中拥有一个方法,并在你需要的时候调用其中的原型。
recurringItemEditor : function (vars) {
this.prototype = new myObject.itemEditor(vars);
this.editItem = function () {
console.log("fn.recurringItemEditor.editItem");
console.log(this.prototype);
console.log(this.prototype.editItem);
this.prototype.editItem.call(this);
}
}
答案 1 :(得分:0)
我使用了你的建议,现在效果很好。关于将它视为函数和对象,为了使对象继承itemEditor的属性,仍然需要myObject .itemEditor.apply(this, [vars]);
。我应该在原始代码中明确说明。如果有更好的方法,请告诉我。
var myObject = {
itemEditor : function (vars) {
var myVars = vars + "foo";
this.editItem = function () {
alert(myVars);
}
},
recurringItemEditor : function (vars) {
myObject .itemEditor.apply(this, [vars]);
this.prototype = new myObject.itemEditor(vars);
this.editItem = function () {
console.log("fn.recurringItemEditor.editItem");
console.log(this.prototype);
console.log(this.prototype.editItem);
this.prototype.editItem.call(this);
}
}
}