理解这个关键字

时间:2018-05-03 20:53:49

标签: javascript

所以我在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?

2 个答案:

答案 0 :(得分:4)

你走在正确的轨道上。它给你NaN的原因是因为&#34; this.thing&#34;还没有定义。它仅在您首先致电myObject.objectFunc()时定义。

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:0)

一个容易理解的解释是JavaScript'this'关键字引用了它所属的对象。 “ this”的值因调用函数的方式而异。 “ this”有四个规则,按照优先顺序可以用来确定“ this”绑定到什么。

规则1.默认绑定:调用函数声明'this'时,关键字将绑定到全局对象。

规则2。隐式绑定:当使用点符号来调用函数时。

规则3.显式绑定:在函数上使用.call()、. apply()或.bind()时。

规则4.新建绑定:通过new关键字调用函数时,“ this”绑定到新创建的对象。