有没有办法获得用{}初始化的对象的原型

时间:2015-02-16 06:14:25

标签: javascript node.js

在JavaScript中,如果我初始化一个这样的对象:

var foo = {};

有没有办法获得该对象的原型?原型很好可能是未定义的。但实际上,我真正想要的只是foo可能具有的已定义字段和函数/方法:

var foo = {

field1: '',
method1: function(){}

};

我正在尝试创建一个经典的继承系统,但是Object.create()似乎想要代表原型的参数而不是别的。

换句话说,我希望var bar = {}从foo继承。但是bar和foo都是用{}初始化的对象。

如何在处理原型或不处理原型的情况下将方法从一个对象添加到另一个对象?

3 个答案:

答案 0 :(得分:2)

当您使用 new ({}与新Object()相同)实例化对象时,原型将成为其属性。这是一个原型继承的简单例子:

// Foo constructor
var Foo = function() {};
Foo.prototype = {
    field1: '',
    method1: function(){}
};

// bar constructor
var Bar = function(){
    Foo.call(this); // calling the parent ctor
};
Bar.prototype = Object.create(Foo.prototype); // inherit from Foo
Bar.prototype.constructor = Bar; // set the ctor just in case it was set by Foo

var bar_instance = new Bar();
bar_instance.method1(); // <-- it works!

我建议你去阅读Google的Closure Library,PrototypeJS和Mootools Class系统的代码,以激励你的努力。

希望这有帮助。

答案 1 :(得分:1)

您可以使用Object.create():

var foo = {
   field1: '',
   method1: function(){}
};
var bar = Object.create(foo);

答案 2 :(得分:1)

你可以试试这个:

http://jsfiddle.net/kc0Lshrp/1/

var foo = {};
foo.constructor.prototype.field1='FOO';
foo.constructor.prototype.method1=function(){ alert(this.field1)};
var bar={field1:'BAR'};
bar.prototype=Object.create(foo);
bar.method1();