我有一个像这样的变量定义:
var obj = function(){
this.prop1 = "prop1";
return this;
}
obj.prop2 = "prop2";
我在尝试访问undefined
时获得obj().prop2
值。
此外,尝试返回obj.prop1
但obj.prop2
返回prop2
值时会返回undefined。
obj().prop2
返回未定义值的原因。 prop2
时,属性obj.prop2 = "prop2"
是否不属于同一对象; obj.prop1
会返回undefined
值。答案 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添加到该对象