我正在查看一些代码,只是为了确保我不会因为遗漏明显的内容而迷失方向,因为这对我来说似乎没有任何收获。似乎浪费了$ .extend()的用法,但也许有人可以对继承中可能缺少的某些东西有所了解。

所以,我们有这个。

_letsCreateNameSpace('US.somenew.obj');
//this is based on S.stoyanov namespace pattern, what this _letsCreateNameSpace does.


然后我在一些代码中看到了这一点,对我来说这没有意义。

US.somenew.obj = function(){
  // some this var assignments.
  this.blah = $foo;
}

// this usage of extend escapes me. I don't see a need at this point here.
$.extend(US.somenew.obj.prototype, {
  // a bunch of new methods


}


我完全看不到使用$ .extend()而不是仅使用以下内容的好处,因为除了自身之外没有任何扩展。

 US.somenew.obj.prototype = {
   // a bunch of new methods
 }


没有“深度”扩展或其他任何内容。.看起来就像是无缘无故地扩展原型的冗长方式。

我想念什么吗?我在这里缺少某些“树木背后的森林”方法吗?

最佳答案

$.extend将给定的方法复制到prototype,而不会覆盖prototype对象本身。因此,例如,如果您有:

// inheritance
US.somenew.obj.prototype = myproto;

US.somenew.obj.prototype =  {
   // you lost the inheritance with `myproto`, here
}


使用$.extend可以防止这种情况。另外,您不会丢失一些默认属性。例如,constructor

US.somenew.obj = function () {};

US.somenew.obj.prototype = {};

var o = new US.somenew.obj();

console.log(o.constructor === US.somenew.obj) // false, in that case is `Object`


哪里:

US.somenew.obj = function () {};

$.extend(US.somenew.obj.prototype, {});

var o = new US.somenew.obj();

console.log(o.constructor === US.somenew.obj) // true

关于javascript - 将自己的obj原型(prototype)扩展到(extend())会获得什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15845905/

10-14 19:03