如何"包装" JavaScript中的内部对象完全正常工作?

时间:2015-04-07 22:06:50

标签: javascript object

我对物体不太满意,这是我的第一个Stack Overflow问题所以请耐心等待。使用以下代码,

function wrap(value) {
   return {
     "value": value
   };
}
var obj = new wrap("Hello");

obj.value等于"你好"。

为什么这样做?它看起来好像wrap()正在返回与变量obj无关的对象,因此obj.value不应该等于Hello

如何将返回的对象分配给变量objobj是否自动等于{"value": value},因为它包含在wrap()内?

4 个答案:

答案 0 :(得分:3)

你基本上和

做同样的事情
var obj = {value: "Hello"};

在这种情况下,以下是真的

obj.value == "Hello"

您通过功能分配的事实并未在此示例中更改任何内容。

答案 1 :(得分:1)

new operator做了两件事:

  1. this绑定到新的空对象
  2. 如果没有达到return语句,则返回函数末尾的this(而不是undefined
  3. 但是你的函数有一个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

您的对象仍然可以使用新关键字

引用内部换行符()