我有很多使用Prototype' Object.extend的代码。它看起来像这样......
var x = Class.create();
Object.extend(
Object.extend( x.prototype, Ajax.Application.Base.prototype ),
{ ... stuff ... }
);
现在Object.extend
的签名是Object.extend(destination, source) → Object
因此我们使用Ajax.Application.Base.prototype扩展x.prototype。然后我们用更多东西扩展该对象(x.prototype)..
是否与double extend()相同?将它们组合在一起的优点是什么?
这些关联是否......
Object.extend(x,y); Object.extend(x,z) == Object.extend(Object.extend(x,y),z);
答案 0 :(得分:0)
回答你的问题 - 是的,Object.extend会返回新对象,该对象具有作为参数传递的2个对象的所有方法和属性。
然而,有一种更有用和简洁的方法来扩展PrototypeJS类
(从我的其他答案中复制一点https://stackoverflow.com/a/15527223/341491)
var myChildClass = Class.create(myClass,
{
initialize : function($super,option)
{
$super(option);
// the child class needs option's default value at 150 or whatever is
// passed so run the parent initialize first and then redefine the
// option property
this.option = (option ? option : 150);
// you can still run methods in the parent that are not overridden in
// the child
this.testme();
}
});
var child = new myChildClass();
child.showme();
//will alert() 151 and return 151
这将创建一个名为myChildClass的类,该类从myClass扩展而来。与此方法的不同之处在于能够使用指向父类的$super()
方法。