javascript中使用此对象的属性,没有这个

时间:2013-10-15 10:30:07

标签: javascript

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

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值。

2 个答案:

答案 0 :(得分:1)

  

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

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

  尝试返回obj.prop1时返回

undefined,但obj.prop2返回prop2值

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

如果您愿意,可以使用其他上下文执行obj(),这可能更有意义:

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

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

答案 1 :(得分: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添加到该对象