公共实例方法

时间:2013-09-02 10:57:01

标签: javascript

var foo = (function(){

    var c = function() {
        c.onCreate(this);
    };

    c.prototype = {
        bar: function() {
            console.log('bar');
        }
    };

    c.onCreate = function(){};

    return c;

})();


foo.onCreate = function(instance){
    console.log('new instance of foo created', instance);
};

var f = new foo();

是否可以创建onCreate的公共实例方法,而不是将其作为静态方法?如果是这样,我会在构造函数或foo原型中声明它吗?

http://jsfiddle.net/LtTam/

为了详细说明,我想在每个实例上调用f.onCreate,而不是调用通用foo.onCreate

2 个答案:

答案 0 :(得分:0)

如果这是你要问的。

删除静态onCreate以成为公共成员Create(也可以使用prototype创建公共实例方法)。同时为该课程添加了私人会员。私人成员只能在内部调用。 阅读此article了解更多详情

var foo = function(){

    function privateMember(){
        console.log('Private Member');
    };

    return {
        create : function(){
            privateMember();
            console.log('Public Member');
        }
    };

};

答案 1 :(得分:0)

方法1

var foo = function(){};

foo.prototype.onCreate = function() {
    console.log("onCreate called");
};

方法2

var foo = function() {
    var actualObject = {};
    actualObject.onCreate = function() {
        console.log("onCreate called");
    }
    return actualObject;
}

样本测试:

var f = new foo();
f.onCreate();
var g = new foo();
g.onCreate();

<强>输出

onCreate called
onCreate called

修改:使用回调

<强>方法1

var foo = function(){
    this.onCreate();
};

foo.prototype.onCreate = function() {
    console.log("onCreate executed");
};

<强>方法2

var foo = function() {
    var actualObject = {};
    actualObject.onCreate = function() {
        console.log("onCreate executed");
    }
    actualObject.onCreate();

    return actualObject;
}

编辑:一个简单的演示http://jsfiddle.net/fvTBE/