为什么“this”关键字不是指我设置的状态?

时间:2018-05-15 20:42:28

标签: javascript object this

我昨天开始研究JavaScript,今天我参加了对象和功能主题。

我已经完成了这项工作,但我真的很怀疑为什么在dog1对象中,如果我使用this关键字,我只会在日志中获得“undefined”返回。

我已经在这里和谷歌上搜索了这个,但没有运气。我不是在寻找解决这个问题的代码,只是为了理解为什么在第二种情况下“这个”不起作用。

 var dog0 = {
     Name: "Bob",
     color: "Golden",
     breed: "Labrador",
     dogcard1: function() {
        return  "Hi, this is " + this.Name + ", a " + this.color + " " + this.breed ;
     }
 };

 console.log(dog0.dogcard1());


function dogcard(a, b, c) {
    return  "Hi, this is " + a + ", a " + b + " " + c ;
 }

var dog1 = new Object();
dog1.Name = "Suzy";
dog1.color = "black";
dog1.breed = "Bulldog";
dog1.presentation = dogcard(this.Name, dog1.color, dog1.breed);
console.log(dog1.presentation);

2 个答案:

答案 0 :(得分:3)

你得到undefined的原因是因为JavaScript没有Name来自的地球线索。

在JavaScript中,您可以依赖三个范围:

  • 阻止范围(对于if语句,对象声明和循环),
  • 功能范围和
  • 全球范围(如果没有其他范围保护,所有内容都将被提升)。

如果您调用this,您可能会看到它附加到Window,这实际上是全局空间。你没有在那里声明Name,这很有道理。

dog1对象内部,您具有引用紧邻对象所需的范围,因此this适用。我会仍然阻止特定用途 - 尽管 - 个人偏好 - 而是传递价值所以它清楚地显示了所有内容的来源。

可能意味着使用dog1代替this来代替该特定变量,所以我鼓励你解决这个问题。

答案 1 :(得分:0)

如果你处于严格模式,如果执行上下文没有定义它,它仍然是“未定义的”。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this