为什么要将JavaScript原型设置为匿名函数?

时间:2014-07-23 04:33:38

标签: javascript

在此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模式吗?

1 个答案:

答案 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);