在此article
中原型对象被设置为“超类”
function Mammal(name){
this.name=name;
this.offspring=[];
}
Cat.prototype = new Mammal();
在我正在阅读的代码中,它有这个构造
COMPANY.BILLING = function(){
//more code
}
COMPANY.BILLING.prototype = (function(COMPANY){
//more code
})(COMPANY)
我很困惑,你为什么要将原型对象的值设置为匿名函数?这不是某种继承,对吗?
这是某种JavaScript模式吗?
答案 0 :(得分:0)
小心,原型没有设置为匿名函数,但它的返回值是:
COMPANY.BILLING.prototype = (function(COMPANY){
//more code
})(COMPANY);
^^^^^^^^^ -> the function is called immediately
这意味着为原型分配了自调用函数的返回值,无论可能是什么:
COMPANY.BILLING.prototype = (function(COMPANY){
return new Foo(); // the new Foo will be assigned to the prototype
})(COMPANY);
通常,这些自调用函数包含在代码块中,以避免使用符号名称污染范围,防止重复的符号名称,最后但并非最不重要的是,防止混淆变量的目的(JavaScript只有函数作用域) ,至少目前的版本)。在函数体中声明的任何变量/函数名称在包含函数体中都可见,但不在外部:
var sampleVariable; // this is visible across this example
COMPANY.BILLING.prototype = (function(COMPANY){
var yetAnotherVariable; // this is only visible "inside" the self-calling function
return new Foo(); // the new Foo will be assigned to the prototype
})(COMPANY);