为什么它在模型中使用return parent.apply(this,arguments)

时间:2016-01-21 06:48:24

标签: backbone.js

我不知道为什么要使用它Treat all warnings as errors继承?

Treat Incompatible Pointer Type Warnings as Errors

1 个答案:

答案 0 :(得分:0)

这与Javascript对象扩展和继承的工作方式密切相关。在Javascript中扩展具有新属性的对象,您必须扩展它的基础原型。

这是一个具有最广泛和优雅的继承方法的小片段。还有其他的原型继承方法,最好的是 Crockford 继承方法(见下文)。

// Classical (the best to use)
Surrogate = function () {
    Parent.call(this);
    this.type = 'Child Element';
    //... other properties
};

Surrogate.prototype = Object.create(Parent.prototype);
Surrogate.prototype.constructor = Surrogate;

Surrogate.prototype.copy = function (source) {

    Parent.prototype.copy.call(this, source);       

    return this;
};

Crockford继承方法:

function object(o) {
    function F() {}
    F.prototype = o;
    return new F();
}

回到你的问题。 applycall之间的唯一区别是第一个需要参数数组作为参数。使用apply,您可以使用数组文字,例如

fun.apply(this, ['eat', 'bananas'])

或Array对象,例如:

fun.apply(this, new Array('eat', 'bananas')).

有关详细说明,请查看以下文章:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

extend函数执行相同的操作:使用额外参数扩展父对象。

return this

返回已调用该方法的对象实例,并用于方法链接。因此,您可以在同一个实例化对象上一次调用多个方法:

var surrogate = new Surrogate();
surrogate.copy().delete();