【问题标题】:Difference between 'var a = b' and 'this.a = b''var a = b' 和 'this.a = b' 之间的区别
【发布时间】:2017-09-12 23:42:19
【问题描述】:

过去几天我一直在处理和学习 JS 中的对象和 OOP,现在我对它们的工作原理有了基本的了解。

困扰我的一件事,而且我有问题的问题,是它的差异:

var bird = "Birdy: var bird"

还有这个

this.bird = "Birdy: this.bird"

它们都会向对象添加一个属性(bird)。在这种情况下,this 指向 object Window。区别在哪里?为什么人们使用*这个。*鸟类方法?它有什么优点(谁能给我看一个example,其中 this.bird 优于 var bird)?

让我们以tutorial 为例:他为什么在那里使用 thisthis 不是多余的吗?难道这整个事情都不能删除 this 和/或替换它吗?

【问题讨论】:

  • 因为this 并不总是window。它几乎可以是任何对象,具体取决于函数的调用方式。
  • 请参阅MDN documentation 以获得更多说明。
  • @标记为重复的人:重复标记完全错误 span>
  • stackoverflow.com/a/43450264/2737783 找到你的答案,因为这个问题被标记为重复。
  • @ manvendrask yo。 span>

标签: javascript oop object


【解决方案1】:

不,你错了。 var 向当前功能上下文添加一个属性:

obj={
  add:function(){
    var plane="test";
    this.bird="test2";
  }//plane gets deleted right here as it isnt used anymoreand it was never part of obj
};

obj.add();
obj.plane;//never existed
console.log(obj.bird);

【讨论】:

  • 感谢这个非常好的例子!那么使用 this 关键字允许在其他上下文(函数之外)使用属性(鸟)?
  • @Faizy 对!当函数返回时,所有使用 var 的东西都会被删除。
  • @Faizy 可以用您的首选语言查看de.wikipedia.org/wiki/Variable_%28Programmierung%29...
  • 还有一个问题:如果我在函数中使用 'this',它实际上会指向哪里?表单示例:'function test() { this.test1 = "test2"} ? “this”现在指向/指的是哪个对象?
  • 啊,它将指向窗口对象,因为函数 test() 被分配给对象窗口,对吧?还有一个问题:让我们以上面的奇妙例子为例。如果我运行它并查看“this”指向的位置,它只会显示“Object ...”。有没有办法获得它指向的对象的确切名称(在这种情况下它将是“obj”)? @乔纳斯 w
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 1970-01-01
  • 2016-05-04
  • 2012-06-26
  • 2020-12-28
  • 2019-12-18
  • 2016-01-13
相关资源
最近更新 更多