2017-01-10 90 views
0

我是新来的和新的Javascript。当我将值输出到控制台时,我遇到了一个奇怪的问题。据我所知,在这两种情况下,名称和颜色是访问它们的对象车的属性,我们需要使用this.propertyName或object.propertyName,但是当我将这些值输出到控制台而不使用此对象或对象时名称,第一个console.log返回一个空字符串,另一个返回未捕获的引用错误。他们是否指向窗口对象?那么在这两种情况下,它应该返回一个未捕获的参考,有人可以请澄清这一点..在此先感谢。 :)javascript变量返回奇怪的输出

var car = { 
    name : "ford", 
    color:"red", 
    log : function(){ 

     console.log(name); 
     // outputs an empty string 

     console.log(color); 
     // Returns error (this.js:8 Uncaught ReferenceError: color is not defined) 

    } 
} 

car.log(); 
+1

变量'name'和'color'不要在你的范围存在,所以JavaScript是看在外面的然后找到它们的全球范围。你的'name'实际上是指'window.name'。 –

+0

@RocketHazmat谢谢 –

回答

4

尝试console.log(this.name)console.log(this.color)

附加信息从MDN

当一个函数被调用作为对象的方法,其它被设置为 方法被调用的对象。

在下面的示例中,当被调用o.f(),函数 内部这势必邻对象。

来源:MDN

+0

我想你的意思是'this.color'。 –

+0

是的,谢谢@RocketHazmat。我修好了它。 –

2

你没有得到的原因一个输出name是浏览器有一个built-in global called nameReferenceError:这是当前窗口的名称。但他们没有一个名为color的内置全局程序,所以你会得到这个错误。

要在对象上访问namecolor当您使用car.log(),你会使用this.namethis.color

+0

这个全局'name'和'window.name'不一样,是吗?因为如果我们在这个代码中用window.name替换name,我们会得到未定义的。 –

+0

@MohitBhardwaj:是的,不,'window.name'不会是'undefined'(假设这是默认的'window'全局,而不是别的)。 –

+0

对不起,你是对的。它是'window.name',它可以控制空白字符串而不是'undefined'。谢谢:) –

0

是的,你是正确的都应该抛出未捕获的参考,但稍候....

居然有上窗口属性,它是...是啊...

所以实际上你安慰窗口的那个属性..即window.name

..第二个就是正确的..未捕获的参考