我对物体不太满意,这是我的第一个Stack Overflow问题所以请耐心等待。使用以下代码,
function wrap(value) {
return {
"value": value
};
}
var obj = new wrap("Hello");
obj.value
等于"你好"。
为什么这样做?它看起来好像wrap()
正在返回与变量obj
无关的对象,因此obj.value
不应该等于Hello
。
如何将返回的对象分配给变量obj
? obj
是否自动等于{"value": value}
,因为它包含在wrap()
内?
答案 0 :(得分:3)
你基本上和
做同样的事情var obj = {value: "Hello"};
在这种情况下,以下是真的
obj.value == "Hello"
您通过功能分配的事实并未在此示例中更改任何内容。
答案 1 :(得分:1)
new
operator做了两件事:
this
绑定到新的空对象this
(而不是undefined
)但是你的函数有一个return语句,它返回对象{ value: value }
,所以你将获得该对象。这与调用var obj = wrap("Hello");
。
要显示new
的重要性,如果您的功能是:
function wrap (value) {
this.value = value;
}
调用var obj = new wrap("Hello")
会得到相同的结果(一个对象value
存储"Hello"
),而调用var obj = wrap("Hello")
会存储" Hello"在全局上下文(窗口,浏览器)中的密钥value
和变量undefined
中的obj
。
答案 2 :(得分:0)
当您使用new
关键字this
调用函数时,除非返回的值与您的代码类似,否则会返回
所以
var obj = new wrap("Hello");
将获得以下值:
{
"value": "Hello"
};
因为它作为参数传递所以:
obj.value=="hello" //true
答案 3 :(得分:0)
将trap()作为类型(类)进行特征处理,并通过新的键工作实例化对象 但你返回对象
使用new关键字创建wrap()的对象但是返回值的对象;
尝试:
function foo( value ) {
function bar( x,y ) { return x+y; }
return { sum: bar, value: value }
}
var obj = new foo("hello");
obj.value == "hello" // true
obj.sum(3,4) // == 7
您的对象仍然可以使用新关键字
引用内部换行符()