“怎么做?”;“包装”;JavaScript中的内部对象是否能正常工作?
我还不太习惯使用对象,这是我的第一个堆栈溢出问题,请耐心等待。使用以下代码“怎么做?”;“包装”;JavaScript中的内部对象是否能正常工作?,javascript,object,Javascript,Object,我还不太习惯使用对象,这是我的第一个堆栈溢出问题,请耐心等待。使用以下代码 function wrap(value) { return { "value": value }; } var obj = new wrap("Hello"); obj.value等于“Hello” 为什么这样做有效?在我看来,似乎wrap()正在返回一个与变量obj无关的对象,因此obj.value不应等于Hello 返回的对象如何分配给变量obj?obj是否自动等于{“value”:value
function wrap(value) {
return {
"value": value
};
}
var obj = new wrap("Hello");
obj.value
等于“Hello”
为什么这样做有效?在我看来,似乎wrap()
正在返回一个与变量obj
无关的对象,因此obj.value
不应等于Hello
返回的对象如何分配给变量
obj
?obj
是否自动等于{“value”:value}
,因为它被包装在wrap()
中?您基本上是在做与
var obj = {value: "Hello"};
在这种情况下,以下是正确的
obj.value == "Hello"
在本例中,您通过函数赋值的事实不会改变任何事情。您实际上在做与
var obj = {value: "Hello"};
在这种情况下,以下是正确的
obj.value == "Hello"
在本例中,您通过函数赋值的事实不会改变任何事情。当您使用
new
关键字调用函数时,将返回此
,除非返回值与您的代码类似:
所以
将获得以下值:
{
"value": "Hello"
};
因为它是作为参数传递的,所以:
obj.value=="hello" //true
当您使用
new
关键字调用函数时,将返回此
,除非返回值与您的代码类似:
所以
将获得以下值:
{
"value": "Hello"
};
因为它是作为参数传递的,所以:
obj.value=="hello" //true
将trait warp()作为类型(类),并通过新的键工作实例化对象
但您返回的是对象
使用new关键字创建wrap()对象,但返回值对象
尝试:
你的对象仍然可以引用带有新关键字的内部wrap()你可以将trait warp()作为类型(类),并通过新的关键字来实例化一个对象
但您返回的是对象
使用new关键字创建wrap()对象,但返回值对象
尝试:
您的对象仍然可以使用新的关键字引用内部包裹()新的new
做两件事:
此
(与未定义的
相反){value:value}
,因此您将得到该对象。这与调用var obj=wrap(“Hello”)相同代码>
要显示新功能的重要性,如果您的功能是:
function wrap (value) {
this.value = value;
}
调用var obj=new wrap(“Hello”)
将给出相同的结果(一个具有键值的对象存储“Hello”
),而调用var obj=wrap(“Hello”)
将在全局上下文(浏览器中的窗口)的键值中存储“Hello”变量obj
中的undefined
,new
做两件事:
将此
绑定到新的空对象
如果没有返回语句,则在函数末尾返回此
(与未定义的
相反)
但是您的函数有一个return语句,它返回对象{value:value}
,因此您将得到该对象。这与调用var obj=wrap(“Hello”)相同代码>
要显示新功能的重要性,如果您的功能是:
function wrap (value) {
this.value = value;
}
调用var obj=new wrap(“Hello”)
将给出相同的结果(一个具有键值的对象存储“Hello”
),而调用var obj=wrap(“Hello”)
将在全局上下文(浏览器中的窗口)的键值中存储“Hello”和变量obj
中的undefined
在返回
时,不需要使用new
。obj将是函数返回的任何内容。当return
ing一个文本时,不需要使用new
。obj将是函数返回的任何内容。哇哇,绝对错误。“通过函数赋值的事实不会改变任何事情”它会改变一切!这种变化的范围。执行上下文将更改。挂起的变量不可用。“new”在函数构造函数中的行为在这里并不明显(尽管在这个确切的用例中很简单)。我个人认为这个答案太天真了。@rockerest:好吧,它改变了与主题无关的一切;上下文并不重要,提升效果是不适用的,“新”在这种情况下没有任何作用(由于非内在回报)。说得好@dandavis。此外,使用“密切相关”这个词也很有用关键是这个答案太幼稚了。当然,如果OP在他们的代码中就是这么做的,那没什么大不了的。但答案应该解决根本原因和问题。像“不会改变任何事情”这样的说法开创了一个危险的先例,即这些话将保持真实,而在大多数情况下,它们不会。这在OP已经声明他们对这个概念不满意的特定场景中尤其如此。保证一切都很好,而忽略所有常见的问题,充其量是幼稚的,充其量是近乎虐待狂的。好老师知道如何在不混淆的情况下有效地传达“大想法”。哇哇,绝对错误。“通过函数赋值的事实不会改变任何事情”它会改变一切!这种变化的范围。执行上下文将更改。挂起的变量不可用。“new”在函数构造函数中的行为在这里并不明显(尽管在这个确切的用例中很简单)。我个人认为这个答案太天真了。@rockerest:好吧,它改变了与主题无关的一切;上下文无关紧要,提升效果不适用,“新”在这种情况下不起任何作用(到期日)