1

我有一个这样的变量定义:

var obj = function(){
this.prop1 = "prop1";
return this;
}

obj.prop2 = "prop2";

undefined尝试访问时我得到了一个价值obj().prop2

此外,在尝试返回obj.prop1obj.prop2返回prop2值时返回 undefined。

  1. 我想知道返回未定义值的原因obj().prop2
  2. 执行时该属性是否prop2不是同一对象的一部分obj.prop2 = "prop2"
  3. 为什么obj.prop1返回undefined值。
4

2 回答 2

1

尝试访问 obj().prop2 时,我得到一个未定义的值。

这是因为obj()返回this,您使用它执行函数的上下文。但是您分配prop2给函数对象,而不是您返回的上下文。

尝试返回 obj.prop1 但 obj.prop2 返回 prop2 值时返回 undefined

在您的代码中,obj是一个函数对象,并且没有prop1分配给它的属性。您正在分配prop1执行函数的上下文,这是一个很大的区别。

如果需要,您可以obj()使用另一个上下文执行,这可能更有意义:

var obj = function() {
    this.prop1 = 'prop1';
    return this;
}.call({ prop2: 'prop2' });

这将导致:{prop2: "prop2", prop1: "prop1"}

于 2013-10-15T11:10:01.850 回答
0

如果你想this工作(或instanceOf),你将不得不使用new. 新的关键词this将新创建的对象绑定到原型为函数原型的对象

如果你想解决这个问题,你可以编写如下代码

 var obj = function(propValue){
   return {
        prop1: propValue
    };
}
var objectCheck = obj('prop1');
console.log(objectCheck .prop1);
objectCheck .prop2 = "prop2";
console.log(objectCheck .prop2);

这很容易理解,obj 函数返回一个具有属性 prop1 的对象,然后您将 prop2 添加到该对象

于 2013-10-15T10:40:38.793 回答