修改使用Object.create()创建的对象原型

Modify the prototype of objects created using Object.create()

本文关键字:创建 对象 原型 Object create 修改      更新时间:2023-09-26
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原型的方法并将它们合并到自己的原型中?

Object.create(new base());

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

我希望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();

既然我读了这个非常好的系列文章(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