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

时间:2014-05-07 23:15:56

标签: javascript

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

以下是一个例子:

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

如何判断此变量是来自实例还是来自类?

2 个答案:

答案 0 :(得分:5)

你可以做到

if (this instanceof Obj)

if (this.constructor === Obj)

if (this !== Obj.prototype)

虽然那更脆弱(想想var foo = Obj.prototype.func;)。

你也可以在构造函数中的实例上设置某种“魔法”属性并测试它是否存在,就像你使用this.instantiated一样。

答案 1 :(得分:0)

也许我可以从另一方来帮助。

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

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

    // constructor code here    

    return self;
};

这种方式使用Obj时,如果您忘记使用new关键字,您仍然会获得新的实例。