我知道这是可行的:
function Foo() {};
Foo.prototype.talk = function () {
alert('hello~\n');
};
var a = new Foo;
a.talk(); // 'hello~\n'
但如果我想打电话
Foo.talk() // this will not work
Foo.prototype.talk() // this works correctly
我找到了一些制作Foo的方法。谈工作,
Foo。__proto__ = Foo.prototype
Foo。talk = Foo.prototype.talk
还有别的办法吗?我不知道这样做是否正确。在JavaScript代码中使用类方法还是静态方法?
在函数或类对象以及它们的实例上实现方法和属性有很多方法。
在类(或函数)本身:Foo.method()或Foo.prop。这些是静态方法或属性
在它的原型上:Foo.prototype.method()或Foo.prototype.prop。创建时,实例将通过原型女巫{method:function(){…},道具:…}。所以foo对象会接收,作为原型,一个foo的副本。原型对象。
在实例本身上:将方法或属性添加到对象本身。foo ={方法:函数(){…},道具:}
this关键字将根据上下文以不同的方式表示和执行。在静态方法中,它将代表类本身(witch毕竟是Function的一个实例:类Foo{}相当等效于let Foo = new Function({})
随着ECMAScript 2015,今天似乎已经很好地实现了,可以更清楚地看到类(静态)方法和属性,实例方法和属性以及自己的方法和属性之间的区别。因此,您可以创建三个具有相同名称但不同的方法或属性,因为它们应用于不同的对象,方法中的this关键字将分别应用于类对象本身和实例对象,通过原型或通过它自己。
class Foo {
constructor(){super();}
static prop = "I am static" // see 1.
static method(str) {alert("static method"+str+" :"+this.prop)} // see 1.
prop="I am of an instance"; // see 2.
method(str) {alert("instance method"+str+" : "+this.prop)} // see 2.
}
var foo= new Foo();
foo.prop = "I am of own"; // see 3.
foo.func = function(str){alert("own method" + str + this.prop)} // see 3.
在函数或类对象以及它们的实例上实现方法和属性有很多方法。
在类(或函数)本身:Foo.method()或Foo.prop。这些是静态方法或属性
在它的原型上:Foo.prototype.method()或Foo.prototype.prop。创建时,实例将通过原型女巫{method:function(){…},道具:…}。所以foo对象会接收,作为原型,一个foo的副本。原型对象。
在实例本身上:将方法或属性添加到对象本身。foo ={方法:函数(){…},道具:}
this关键字将根据上下文以不同的方式表示和执行。在静态方法中,它将代表类本身(witch毕竟是Function的一个实例:类Foo{}相当等效于let Foo = new Function({})
随着ECMAScript 2015,今天似乎已经很好地实现了,可以更清楚地看到类(静态)方法和属性,实例方法和属性以及自己的方法和属性之间的区别。因此,您可以创建三个具有相同名称但不同的方法或属性,因为它们应用于不同的对象,方法中的this关键字将分别应用于类对象本身和实例对象,通过原型或通过它自己。
class Foo {
constructor(){super();}
static prop = "I am static" // see 1.
static method(str) {alert("static method"+str+" :"+this.prop)} // see 1.
prop="I am of an instance"; // see 2.
method(str) {alert("instance method"+str+" : "+this.prop)} // see 2.
}
var foo= new Foo();
foo.prop = "I am of own"; // see 3.
foo.func = function(str){alert("own method" + str + this.prop)} // see 3.