为什么窗口范围内的调用函数与对象范围不同

时间:2017-06-02 03:41:45

标签: javascript

为什么调用窗口作用域中的Person返回“[Object Object]”,同时调用对象作用域中的Object返回Object。

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

全局window对象已经具有name的属性,并且它位于本机代码的范围内。

https://www.w3schools.com/jsref/prop_win_name.asp

答案 1 :(得分:0)

window.name是一个getter / setter来设置窗口的名称。因此,它必须是string类型。

试试这个:

window.name = ["something", "else"];

您会看到现在window.name设置为"something,else";这是Array.toString()的结果。

这正是这里发生的事情。当您致电object toString时,您会获得[object Object]

如果您不使用预定义的window.name getter / setter。

,您的程序可以正常工作



function Person(first, last) {
    this.something = {
        first,
        last
    };
}

f = {};

Person.call(f, "fsd", "fsd");
console.log(f.something);

g = window;
Person.call(g, "fsd", "fsd");
console.log(g.something);




更多关于javascript中的getter / setter:

Setters:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/set

吸气剂:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/get