空javascript函数的骨架

时间:2013-10-09 15:43:25

标签: javascript function prototype

我用原型创建了一个javascript函数的骨架:

'use strict';  
var functionName = (function () {  
    var functionName = function(param1){  
        console.log("functionName " + param1);  
        this.init(param1);  
    };  

    // public function  
    functionName.prototype = {  
        init : function(param1) {  
            console.log("init " + param1);  
            var privateVar = param1;  
            this.setFunction();  
        },  
        setFunction : function() {  
            console.log("setFunction");  
            // do stuff here  

        }  
    };  

    return functionName;  
}());  

// Instances creation  
var f1 = new functionName("f1");  
var f2 = new functionName("f2");  
f1.setFunction();  
console.log("private var : " + f1.privateVar);  

查看here中的代码 你怎么看? 以下是此脚本的日志:

functionName f1 (index):25  
init f1 (index):32  
setFunction (index):37  
functionName f2 (index):25  
init f2 (index):32  
setFunction (index):37  
setFunction (index):37  
private var : undefined (index):51  

我不明白为什么我看了三次setFunction。有人有想法吗?
函数SetFunction的原型不应该执行一次?

1 个答案:

答案 0 :(得分:3)

您在初始this.setFunction();内调用了init。无论何时调用构造函数,都会遇到此问题。

因此,它会被两次击中:

var f1 = new functionName("f1");  
var f2 = new functionName("f2");

然后你再次分别召唤它,第三次:

f1.setFunction();