所以我在JS中已经researching关键字“this”,我不确定我是否完全理解它。因此,在尝试理解“this”关键字时,我首先创建了一个JS对象,看看我是否可以根据使用this关键字执行的某些数学返回一个值。以下代码是我最初的尝试:
#define WORD_LENGTH 1024
#define SIZE_QUOTE 100
int main(){
char **quote = malloc(sizeof(char*) * (size_t)SIZE_QUOTE);
long i;
for(i = 0; i < SIZE_QUOTE; i++){
if(!(malloc(sizeof(char) * (size_t)WORD_LENGTH)))
exit(1);
}
i = 0;
FILE *pf = fopen("words.txt", "r");
while(!feof(pf) && i < SIZE_QUOTE){
fscanf(pf, "%s", quote[i]);
printf("%s", quote[i]);
i++;
}
fclose(pf);
free(quote);
}
所以我希望这个控制台日志返回30,但是我在控制台中得到了“NaN”。有人能解释一下为什么吗?并且还指出了一些更容易理解的文档/解释,而不是上面链接的MDN?
答案 0 :(得分:4)
你走在正确的轨道上。它给你NaN的原因是因为&#34; this.thing&#34;还没有定义。它仅在您首先致电myObject.objectFunc()
时定义。
let myObject = {
objectFunc: function() {
this.thing = 10;
},
addFunc: function(x) {
let result = this.thing + x;
return result;
}
}
myObject.objectFunc()
console.log(myObject.addFunc(20));
&#13;
答案 1 :(得分:0)
一个容易理解的解释是JavaScript'this'关键字引用了它所属的对象。 “ this”的值因调用函数的方式而异。 “ this”有四个规则,按照优先顺序可以用来确定“ this”绑定到什么。
规则1.默认绑定:调用函数声明'this'时,关键字将绑定到全局对象。
规则2。隐式绑定:当使用点符号来调用函数时。
规则3.显式绑定:在函数上使用.call()、. apply()或.bind()时。
规则4.新建绑定:通过new关键字调用函数时,“ this”绑定到新创建的对象。