Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “var a=b”和“this.a=b”之间的差异_Javascript_Oop_Object - Fatal编程技术网

Javascript “var a=b”和“this.a=b”之间的差异

Javascript “var a=b”和“this.a=b”之间的差异,javascript,oop,object,Javascript,Oop,Object,在过去的几天里,我一直在处理和学习JS中的对象和OOP,现在我已经基本了解了它们的工作原理 有一件事困扰着我,我很难理解,那就是这两者之间的区别在哪里: var bird = "Birdy: var bird" 还有这个 this.bird = "Birdy: this.bird" 它们都将向对象添加propertybird。在本例中,这指向对象窗口。区别在哪里?为什么人们使用*this.*bird方法?它的优点是什么?有人能给我举个例子,说明this.bird优于var bird吗 让我们

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

有一件事困扰着我,我很难理解,那就是这两者之间的区别在哪里:

var bird = "Birdy: var bird"
还有这个

this.bird = "Birdy: this.bird"
它们都将向对象添加propertybird。在本例中,这指向对象窗口。区别在哪里?为什么人们使用*this.*bird方法?它的优点是什么?有人能给我举个例子,说明this.bird优于var bird吗


让我们举个例子:他为什么在那里用这个?这不是多余的吗?这整件事难道不能把它拆下来和/或换掉吗?

不,你错了。var将属性添加到当前函数上下文中:


因为这并不总是窗户。它几乎可以是任何对象,具体取决于函数的调用方式。请参考更多说明。@标记为重复的人:重复标记完全错误,请在找到您的答案,因为这个问题标记为重复。@ManvendraSK Yo。感谢这个非常好的示例!因此,使用this关键字允许在函数之外的其他上下文中使用propertybird?@Faizy right!当函数返回时,使用var的所有内容都将被删除。@Faizy可能会用您的首选语言查看一下……还有一个问题:如果我在函数中使用“this”,它将实际指向哪里?表单示例:'函数测试{this.test1=test2}?“this”现在指向/指的是哪个对象?啊,它将指向窗口对象,因为功能测试辅助对象窗口,对吗?还有一个问题:让我们以上面的例子为例。如果我运行它并查看“this”指向的位置,它将只显示“Object…”。有没有办法得到物体的确切名称,在这个cas中,它指向的是obj@乔纳斯w
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);