var Policy={
initialize:function(){
return function(){
this.initialize.apply(this,arguments);
};
}
};
var AjaxLoadingPolicy= Policy.initialize();//(1)
AjaxLoadingPolicy.prototype={
initialize:function(name){
this.name=name;
}
};
基于此代码,AjaxLoadingPolicy是(1)中this.initialize.apply(this,arguments)的函数。但我真的不明白this.initialize是什么。以及为什么可以在AjaxLoadingPolicy.prototype中定义它?此外,是否使用apply来将超类优先级应用于实例?
答案 0 :(得分:1)
在代码中的(1)处, AjaxLoadingPolecy 的值被赋予对具有正文的新函数对象的引用:
function(){
this.initialize.apply(this,arguments);
};
调用该函数时this
的值只能通过查看它的调用方式来确定。如果它被简单地称为AjaxLoadingPolecy()
,则this
将引用全局对象(或在严格模式下未定义)。
分配给AjaxLoadingPolecy.prototype
的对象有一个 initialize 方法,该方法由 AjaxLoadingPolecy 的实例继承(即由new AjaxLoadingPolecy()
创建的对象),它不是由 AjaxLoadingPolecy 本身继承的。
对象继承自构造函数的公共原型(称为实例的内部[[Prototype]]
),而不是它们自己的公共原型。
顺便提一下,在OP中,有以下内容:
AjaxLoadingPolicy.prototype={
initialize:function(name){
this.name=name;
}
};
与:
完全相同AjaxLoadingPolicy.prototype.initialize = function(name) {
this.name=name;
};
第二个使用现有的prototoype对象,而前者替换它(使用更多代码并浪费对象的实例化)。
apply
用于设置函数this
并提供参数。 Javascript没有类(或超类),但在模拟该行为时可能会使用apply
和call
。