无论这种命名方案的智慧如何,以下是否有效?
var F = function() { this.f1 = function() {} } F.f1 = function() {} // "static" call var v1 = F.f1(); // prototype call var f = new F(); var v2 = f.f1();
它似乎应该没问题,因为例如,对象函数中的var
和this
变量不共享相同的空间。
答案 0 :(得分:2)
是的,这是有效的。
在您的示例中,F
是一个函数,您可以为其分配一个名为f1
的属性,该属性本身就是一个函数。如果您要将代码更改为f = new F()
,那么f
是一个继承自F
原型的对象,但它们仍然是两个不同的对象。
答案 1 :(得分:2)
有效。
像其他人所说的那样,这里没有原型相关的问题
您将2个属性附加到2个不同的对象:
所以,从F !== new F()
起,它们是不同的东西,有不同的道具。
如果您想使用原型继承,可以考虑以下示例:
var F = function(){}
// function visible to all of F's instances
F.prototype.f1 = function(){console.log("I'm inherited!");}
// a so called "static" function
F.f1 = function(){console.log("I'm static!");}
var instance1 = new F();
var instance2 = new F();
// function visible only to this instance of F
instance1.f1 = function(){console.log("I'm visible only to this instance of F");}