Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 公共实例方法_Javascript - Fatal编程技术网

Javascript 公共实例方法

Javascript 公共实例方法,javascript,Javascript,是否可以创建onCreate的公共实例方法,而不是将其作为静态方法?如果是这样,我会在构造函数中声明它,还是在foo原型中声明它 为了详细说明,我想在每个实例上调用f.onCreate,而不是调用泛型foo.onCreate,如果这是您所要求的 删除了静态onCreate以成为公共成员Create(也可以使用prototype创建公共实例方法)。还为类添加了一个私有成员。只能在内部调用私有成员。 阅读本文了解更多细节 var foo = (function(){ var c = fu

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


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

,如果这是您所要求的

删除了静态onCreate以成为公共成员Create(也可以使用prototype创建公共实例方法)。还为类添加了一个私有成员。只能在内部调用私有成员。 阅读本文了解更多细节

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();

方法1

var foo = function(){

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

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

};
onCreate called
onCreate called
方法2

var foo = function(){};

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

foo.prototype.onCreate = function() {
    console.log("onCreate executed");
};
样本测试:

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();
编辑:带回调

方法1

var foo = function(){

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

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

};
onCreate called
onCreate called
方法2

var foo = function(){};

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

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

编辑:一个简单的演示

你所说的
公共实例方法
静态方法
是什么意思?很抱歉,当涉及javascript时,我会感到困惑。@fourtheye我想将
foo.onCreate
更改为
f.onCreate
。换句话说,访问每个实例上的方法。恐怕这不是我想要的。希望我上面的评论能让它更清楚。我希望在调用新实例时进行回调,而不是自己简单地调用onCreate方法。@Johan更新了我的解决方案。请现在检查。新的方法1更接近我需要的。但是,在一个实际的例子中,你怎么称呼它呢?请随意添加一个fiddle@Johan添加了一个演示小提琴。请检查。
f
实例上仍然没有回调方法