我使用以下函数创建新对象。
function newObj(o) {
var params = Array.prototype.slice.call(arguments,1);
function F() {}
F.prototype = o;
var obj = new F();
if(params.length) {
obj.init.apply(obj,params);
}
return obj;
}
大部分时间它运作良好。但是,我的一个基类“类”现在被定义为继承自另一个基类
SPZ.EditablePuzzle = function () {
// function and variable definitions
return {
///some methods and properties
}
}();
SPZ.EditablePuzzle.prototype = SPZ.Puzzle;
现在当我使用newObj()创建一个新的SPZ.EditablePuzzle时,即使它在SPZ.Puzzle中定义,也没有定义init函数,我确保在Puzzle之后运行EditablePuzzle
为什么我的newObj函数找不到init函数?一旦它无法在对象本身中找到它,它是否应该自动查看原型?
答案 0 :(得分:0)
关于这个问题:
function Foo() {
}
Foo.prototype.init = function() {
console.log('bla');
};
function FooBar() {
}
FooBar.prototype = Foo; // looks fishy...
var kitten = new FooBar();
console.log(kitten.init); // yields undefined, uh what?
问题是,在这种情况下,Foo
本身被分配给prototype属性,实际上你想要这样做:
FooBar.prototype = Foo.prototype
看到区别? Foo
没有init
属性,因为它在prototype
对象上定义。
答案 1 :(得分:0)
我怀疑遗传设置不好。尝试做
SPZ.EditablePuzzle.prototype = new SPZ.Puzzle;
虽然我不确定,但可能会解决这个问题。