TypeScript类方法的语法
在TypeScript中,我可以定义一些方法,比如实方法(TypeScript类方法的语法,typescript,typescript-eslint,Typescript,Typescript Eslint,在TypeScript中,我可以定义一些方法,比如实方法(Foo)或者一个属性,该属性获得一个分配的方法(Baz) 它们相等吗 有区别吗 我应该使用什么语法 我可以使用typescript eslint禁止其中一个吗 它们并不等同Baz不会出现在TestClass的原型上(Foo会),但它将是每个实例上的一个属性。正如公认的答案所说,Baz不在TestClass的原型上,但Foo是。以下测试代码帮助我理解了这意味着什么: class TestClass { public Baz = ()
Foo
)或者一个属性,该属性获得一个分配的方法(Baz
)
typescript eslint
禁止其中一个吗它们并不等同
Baz
不会出现在TestClass
的原型上(Foo
会),但它将是每个实例上的一个属性。正如公认的答案所说,Baz
不在TestClass
的原型上,但Foo
是。以下测试代码帮助我理解了这意味着什么:
class TestClass {
public Baz = (): void => {
console.log("Baz");
}
public Foo(): void {
console.log("Foo");
}
}
class SubClass1 extends TestClass { }
class SubClass2 implements TestClass {
public Baz = (): void => {
console.log("Baz of SubClass2");
}
public Foo(): void {
console.log("Foo of SubClass2");
}
}
TestClass.prototype.Baz = (): void => { console.log("Baz on prototype"); } // has no effect because Baz not on prototype
TestClass.prototype.Foo = (): void => { console.log("Foo on prototype"); }
const a = new TestClass();
const b = new TestClass();
const c = new TestClass();
const d = new SubClass1();
const e = new SubClass2();
a.Baz = (): void => { console.log("Baz of a"); }
a.Foo = (): void => { console.log("Foo of a"); }
b.Baz = (): void => { console.log("Baz of b"); }
b.Foo = (): void => { console.log("Foo of b"); }
console.log("a:");
a.Baz();
a.Foo();
console.log("b:");
b.Baz();
b.Foo();
console.log("c:");
c.Baz();
c.Foo();
console.log("d:");
d.Baz();
d.Foo();
console.log("e:");
e.Baz();
e.Foo();
您将获得以下输出:
a:
Baz of a
Foo of a
b:
Baz of b
Foo of b
c:
Baz
Foo on prototype
d:
Baz
Foo on prototype
e:
Baz of SubClass2
Foo of SubClass2
所以篡改TestClass.prototype.Baz
没有效果。
但是,更改TestClass.prototype.Foo
,将更改新实例的Foo
的默认实现。
但是,每个实例都可以覆盖
Foo
和Baz
,而不影响任何其他实例。完全由您决定。并且没有必要禁止一个。请注意,不推荐多个问题。问题3是一个观点,而问题4听起来像是一个独立的问题。谢谢,@Julian。让我去掉后面的两个问题,然后它实际上只是一个问题。另一个要考虑的是箭头函数的<代码>这个上下文被明确绑定到类实例,但是方法定义的<>代码>这个< /C> >上下文隐式地绑定到类实例。即const x=instance.Foo;x()
将不起作用,但const y=instance.Baz;y()
将始终有效。
a:
Baz of a
Foo of a
b:
Baz of b
Foo of b
c:
Baz
Foo on prototype
d:
Baz
Foo on prototype
e:
Baz of SubClass2
Foo of SubClass2