javascript中使用此和不使用此的对象的属性
我有这样一个变量定义:javascript中使用此和不使用此的对象的属性,javascript,Javascript,我有这样一个变量定义: var obj = function(){ this.prop1 = "prop1"; return this; } obj.prop2 = "prop2"; 尝试访问obj().prop2时,我得到一个未定义的值 此外,尝试返回obj.prop1但obj.prop2返回prop2值时,将返回未定义 我想知道obj().prop2返回未定义值的原因 执行obj.prop2=“prop2”时,属性prop2是否不是同一对象的一部分 为什么obj.prop1返回未定义的值
var obj = function(){
this.prop1 = "prop1";
return this;
}
obj.prop2 = "prop2";
尝试访问obj().prop2
时,我得到一个未定义的值
此外,尝试返回obj.prop1
但obj.prop2
返回prop2
值时,将返回未定义
我想知道obj().prop2
返回未定义值的原因李>
执行obj.prop2=“prop2”
时,属性prop2
是否不是同一对象的一部分李>
为什么obj.prop1
返回未定义的值
如果希望此
工作(或实例
),则必须使用新建
。新关键字将此
绑定到新创建的对象,该对象的原型为函数原型
如果您想解决这个问题,您可以编写如下代码
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添加到该对象中如果您希望此
工作(或instanceOf
),则必须使用新建
。新关键字将此
绑定到新创建的对象,该对象的原型为函数原型
如果您想解决这个问题,您可以编写如下代码
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添加到该对象中
尝试访问obj().prop2时,我得到一个未定义的值
这是因为obj()。但是您将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”}
尝试访问obj().prop2时,我得到一个未定义的值
这是因为obj()。但是您将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”}
如何将prop2添加到从函数中返回的上下文中。可能吗?@user2599052只需添加this.prop2='prop2'
但是如果您不知道它的作用,我建议您不要使用this
,因为您可能会污染全局名称空间。只返回一个对象更安全:return{prop1:'prop1',prop2:'prop2'}代码>如何将prop2添加到从函数中返回的上下文中。可能吗?@user2599052只需添加this.prop2='prop2'
但是如果您不知道它的作用,我建议您不要使用this
,因为您可能会污染全局名称空间。只返回一个对象更安全:return{prop1:'prop1',prop2:'prop2'}代码>