编写一个小方法,我希望既可以作为对象中的方法,也可以从原型中静态运行。
以下是一个例子:
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();
如何判断此变量是来自实例还是来自类?
答案 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
关键字,您仍然会获得新的实例。