0
var base = function() { };
base.prototype.doStuff = function() { 
    console.log(1); 
};

var foo = Object.create(new base());
console.log(typeof foo); //object
foo.doStuff(); //1

http://jsfiddle.net/xmYQn/

我知道那里有一些类似的问题,但我找不到这个问题的答案。

这行得通,但是如果我想foo成为类型function以便可以向其原型添加属性怎么办?也就是说,让它继承原型中的方法,base并与自己的原型合并?

4

2 回答 2

2
Object.create(new base());

这会创建一个新的普通对象,该对象继承自一个base实例(继承自base.prototypeetc)。你几乎不需要这样的东西。

我希望 foo 是函数类型

然后将其定义为一个函数:

function foo() {}

…这样我就可以向它的原型添加属性?

现在你可以做到了。

让它继承基础原型的方法并将它们与自己的原型合并?

没有太多的“合并”。但是您可以创建一个继承自 的新对象base.prototype,将其设置为 foo 的原型,然后在其中添加您的属性:

foo.prototype = Object.create(base.prototype); // of course, anything that was
                                               // previously set on foo.prototype
                                               // is now lost
foo.prototype.constructor = foo;
foo.prototype.doOtherStuff = function(){…};
…

然后做

var fooInstance = new foo;
fooInstance.doStuff(); // 1
fooInstance.doOtherStuff();
于 2013-05-16T11:22:19.127 回答
1

由于我阅读了这个非常好的系列文章(http://davidwalsh.name/javascript-objects-deconstruction),我会选择类似的内容:

var Base = { 
    doStuff : function() { 
        console.log(1); 
    }
};

var foo = Object.create(Base);
foo.doStuff = function() { 
      console.log(2); 
    };

var foo2 = Object.create(foo);

console.log(typeof foo); //object
foo.doStuff(); //2
foo2.doStuff(); //2
于 2013-05-16T11:26:15.587 回答