JavaScript 中对象的属性使用 this 和不使用 this

properties of object in javascript using this and without this

本文关键字:this 属性 对象 JavaScript      更新时间:2023-09-26

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

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

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

此外,当尝试返回obj.prop1obj.prop2返回prop2值时,返回未定义。

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

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

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

尝试返回 obj.prop1

但 obj.prop2 返回 prop2 值时返回未定义

在代码中,obj是一个函数对象,没有为其分配prop1属性。您将prop1分配给执行函数的上下文,这是一个很大的不同。

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

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

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

如果你想让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 添加到该对象