class Test {
X = 'X';
someFunc = () => {
console.log('someFunc is called');
//someFunc2(); // undefined
this.someFunc2(); //works
}
someFunc2() {
console.log('someFunc2 is called');
}
}
Z = new Test();
console.log(Z.hasOwnProperty('X')); // true
console.log(Z.hasOwnProperty('someFunc')); // true
console.log(Z.hasOwnProperty('someFunc2')); // false
Z.someFunc();
据我所知,我在尝试引用/使用某些对象属性时使用了this
关键字,但在上面的代码中我尝试测试的是{{1} }是对象的属性,它返回false,但仍可以通过someFunc2
进行调用。那么这是否意味着this.someFunc2();
关键字不用于访问对象属性?
答案 0 :(得分:1)
我认为console.log(Z.hasOwnProperty('someFunc2')); // false
对JavaScript中的this
来说不是问题。它更多地与函数声明有关。
someFunc = ()=>{
console.log('someFunc is called');
//someFunc2(); // undefined
this.someFunc2(); //works
}
是分配了匿名功能的属性。而
someFunc2(){
console.log('someFunc2 is called');
}
是简写函数定义。供参考:
class Test {
X = 'X';
someFunc = ()=>{
console.log('someFunc is called');
//someFunc2(); // undefined
this.someFunc2(); //works
}
someFunc2 = function (){
console.log('someFunc2 is called');
}
}
Z = new Test();
console.log(Z.hasOwnProperty('X')); // true
console.log(Z.hasOwnProperty('someFunc')); // true
console.log(Z.hasOwnProperty('someFunc2')); // true
console.log(Z.hasOwnProperty('someFunc2'));
解析为真!
文档:https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Functions/Methoden_Definitionen
我的第一个答案,希望对您有所帮助。
答案 1 :(得分:0)
class Test {
X = 'X';
someFunc = () => {
console.log('someFunc is called');
//someFunc2(); // undefined
this.someFunc2(); //works
}
someFunc2() {
console.log('someFunc2 is called');
}
}
和
class Test {
X = 'X';
someFunc = () => {
console.log('someFunc is called');
//someFunc2(); // undefined
this.someFunc2(); //works
}
someFunc2 = () => {
console.log('someFunc2 is called');
}
}
区别是:
在第一个示例中,我们使用了函数定义,但从未将函数分配给任何属性或属性。因此,当您尝试使用 hasOwnProperty 时,它会发现名称 someFunc2 的no属性或属性可用。
class Test {
....
someFunc2() {
console.log('someFunc2 is called');
}
}
在第二个示例中,我们为属性 someFunc2 分配了一个匿名函数,因此当您尝试使用 hasOwnProperty 时,它会发现该属性或属性 someFunc2 可用
class Test {
...
someFunc2 = () => {
console.log('someFunc2 is called');
}
}
答案 2 :(得分:0)
区别在于箭头功能的工作方式,
箭头函数没有自己的上下文,这意味着它们的“ this”关键字与父函数“ this”关键字(在本例中为Test类)相同,它们都引用相同的上下文。
的含义是,当您使用“ new Test()”启动“ Test”的实例时,“ someFunc”将自动继承该实例的上下文,而“ someFunc2”则不会,并将通过原型链继承。
您可以通过使用
进行确认console.log(Z.__proto__.hasOwnProperty('someFunc2'))
这就是为什么您仍然可以调用它的原因。
我希望这可以澄清一些确切的事情。