代码中的Prototype.js和成语?

时间:2015-01-02 21:46:38

标签: javascript prototypejs

我有很多使用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);

1 个答案:

答案 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()方法。