检查方法是静态运行还是从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想要做的:我想在对象中作为方法工作,并从原型静态运行。