【问题标题】:Old object as a prototype旧对象作为原型
【发布时间】:2011-09-09 11:33:53
【问题描述】:

我正在阅读 this 的书,其中有一章是关于原型的,其中包含这个难以理解的段落和代码 sn-p。

当你制作一个新的对象时,你可以选择应该是的对象 它的原型。 JavaScript 提供的机制是 杂乱而复杂,但可以大大简化。我们将添加 Object 函数的一个 beget 方法。 beget 方法创建一个新的 使用旧对象作为其原型的对象。

if (typeof Object.beget !== 'function') {
     Object.beget = function (o) {
         var F = function () {};
         F.prototype = o;
         return new F();
     };
}
var another_stooge = Object.beget(stooge);

您能否解释一下这段代码,为什么这样好等?您会推荐哪种资源来研究原型?这是相当困难的。

【问题讨论】:

标签: javascript prototype-programming


【解决方案1】:

如果你这样做:

Object.beget(oldObject);

旧对象是传递给函数的o。接下来是创建新对象。这发生在:

var F = function(){};

这创建了新的函数 F,大写只是为了表明它是一个应该用 new 调用的类。 接下来,将旧对象设置为此类的原型,并返回 F 的新实例。

F.prototype = o;
return new F();

您应该意识到,在 JavaScript(没有类)中,对象只是函数的实例。

【讨论】:

  • 我认为您的意思是 o 而不是 0
  • 对象只是函数的实例 ...这不是真的。当你调用new Func() 时,函数内部的this 指的是一个继承自Func.prototype 的空对象。就这样。或者你的意思可能与我理解的不同:)
【解决方案2】:

我总是发现关于 JavaScript 的 MDN 文档很有启发性,对我来说,这个文档很好地涵盖了原型:https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Details_of_the_Object_Model

【讨论】:

  • 谢谢,我会看的。大约一周前我看到了这个,但网站已损坏或其他原因,所以我避免了这个,但现在它可以阅读了。
猜你喜欢
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多