检查方法是静态运行还是从Javascript中的实例运行

检查方法是静态运行还是从Javascript中的实例运行,javascript,Javascript,编写一个小方法,我希望它既可以作为对象中的方法使用,也可以从原型静态运行 以下是一个例子: function Obj() {} Obj.prototype.func = function() { if( this.instantiated ) { // Yes I know this is not valid code! // instantiated code here } else { // instantiated code her

编写一个小方法,我希望它既可以作为对象中的方法使用,也可以从原型静态运行

以下是一个例子:

function Obj() {}

Obj.prototype.func = function() {

    if( this.instantiated ) { // Yes I know this is not valid code!

        // instantiated code here

    } else {

        // instantiated code here

    }

};

var myObj = new Obj();

myObj.func();

Obj.prototype.func();
如何判断此变量是来自实例还是仅来自类?

您可以这样做

if (this instanceof Obj)

尽管这更脆弱,但想想var foo=Obj.prototype.func

您还可以在构造函数的实例上设置某种神奇的属性,并测试它的存在性,就像您使用这个一样。实例化。

您可以这样做

if (this instanceof Obj)

尽管这更脆弱,但想想var foo=Obj.prototype.func


你也可以在构造函数的实例上设置一些神奇的属性,并测试它的存在性,就像你用这个做的一样。实例化。

也许我可以从另一个角度来帮助你

我在OO JavaScript中使用的一种模式是:

var Obj = function() {
    var self = (this instanceof Obj) ? this : Object.create(Obj.prototype);

    // constructor code here    

    return self;
};

这样在使用Obj时,如果您忘记使用new关键字,您仍然会得到一个新实例。

也许我可以从另一个角度提供帮助

我在OO JavaScript中使用的一种模式是:

var Obj = function() {
    var self = (this instanceof Obj) ? this : Object.create(Obj.prototype);

    // constructor code here    

    return self;
};

这样,在使用Obj时,如果忘记使用new关键字,则始终会得到一个新实例。

这对Obj.prototype.func没有帮助;尽管如此。没错,但一旦定义,你多久调用一次这样的函数?这似乎是OP想要做的:我想在对象中同时作为方法和从原型静态运行。这对Obj.prototype.func没有帮助;尽管如此。没错,但一旦定义,你多久调用一次这样的函数?这似乎是OP想要做的:我想在对象中作为方法工作,并从原型静态运行。