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'}