继承自原型vs继承自构造函数

时间:2015-01-04 03:54:45

标签: javascript inheritance

我正在搜索更多Object.create。我发现用户已经提出了this个问题。在接受的答案中,他们谈论的是继承,如

Object.create构建一个直接从作为第一个参数传递的对象继承的对象。

var o = new SomeConstructor();

在上面的示例中,o直接从SomeConstructor.prototype

继承

现在我只想知道prototype的继承的意思是什么,以及它如何从继承直接从构造函数中实现差异

1 个答案:

答案 0 :(得分:1)

Object.create的解释

当你做这样的事情时:

var obj = Object.create( baseMethods );

obj.ownMethod = function () {
  console.log( 'baz' );
};

var baseMethods = {
  method1: function () {
    console.log( 'something' );
  },
  method2: function () {
    console.log( 'foobar' );
  }
};

当JavaScript引擎无法在obj上找到属性时,对象baseMethod 委托obj对象。例如,如果您调用:

obj.method1(); // will log 'something'

JavaScript引擎将首先尝试在obj上查找属性。由于在obj上无法找到该属性,因此它会委托查找原型对象(我们已使用Object.create定义)。在这种情况下,原型对象是baseMethod。现在已找到该属性,引擎将执行method1

Constructor.prototype的解释

在您的代码中,您有:

var o = new SomeConstructor();

SomeConstructor视为具有与我的baseMethods对象类似的对象,其中SomeConstructor的实例将首先在实例本身上查找属性,然后委托到该对象该物业无法找到。在您的示例中,恰好SomeConstructor的实例将委托给的对象是SomeConstructor.prototype

查看您的问题,请不要错误地认为o继承自SomeConstructor - 正确的方法是o 委托< / strong>它对一个对象的对象查找恰好是SomeConstructor函数对象上的一个属性(即SomeConstructor.prototype