“怎么做?”;“包装”;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
做两件事:

  • 将此绑定到新的空对象
  • 如果没有返回语句,则在函数末尾返回
    (与
    未定义的
    相反)
  • 但是您的函数有一个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
    做两件事:

  • 将此
  • 绑定到新的空对象
  • 如果没有返回语句,则在函数末尾返回
    (与
    未定义的
    相反)
  • 但是您的函数有一个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:好吧,它改变了与主题无关的一切;上下文无关紧要,提升效果不适用,“新”在这种情况下不起任何作用(到期日)