new
关键字:
-
代表通过构造函数创建一个新的对象实例。
-
作用是调用构造函数,并将该构造函数内部的
this
绑定到新创建的对象上。 -
使用
new
关键字创建对象实例。 -
使用案例
function Person(name) { // 在构造函数中,this关键字指向新创建的对象实例 this.name = name; } const person1 = new Person('Alice'); console.log(person1.name); // 输出 "Alice"
-
注释:
-
第4行:定义了一个构造函数
Person
。 -
第7行:使用
new
关键字调用Person
构造函数创建一个新的对象实例person1
。 -
第8行:输出
person1
的name
属性,结果为 "Alice"。
-
-
this
关键字:-
代表当前执行上下文中的对象。
-
作用是引用当前对象,用于访问和操作对象的属性和方法。
-
使用场景包括全局作用域、函数内部、对象方法等。
-
使用案例:
const car = { brand: 'Tesla', getModel: function() { // 在对象方法中,this关键字指向当前对象car return this.brand; } }; console.log(car.getModel()); // 输出 "Tesla"
-
注释:
-
第2行:定义了一个对象
car
,其中有一个属性brand
和一个方法getModel
。 -
第4行:在
getModel
方法中使用this
关键字引用当前对象car
的brand
属性。 -
第7行:输出调用
car
的getModel
方法的结果,结果为 "Tesla"。
-
-
通过以上代码和注释,我们可以看到
new
关键字用于创建对象实例,而this
关键字用于引用当前对象。它们分别在创建对象和访问对象的属性、方法时发挥作用。 -
this
关键字在 JavaScript 中的指向是动态的,它的具体指向取决于函数的调用方式。下面是不同情况下this
可能指向的对象以及相关案例和每行的注释说明: -
全局作用域下:
-
在全局作用域中,
this
指向全局对象(在浏览器中通常是window
对象)。 -
使用案例:
-
-
console.log(this); // 输出全局对象(在浏览器中为window对象)
-
注释:
-
第2行:输出全局对象,结果为全局对象(在浏览器中为window对象)。
-
-
函数中:
-
在函数中,
this
的指向取决于函数的调用方式。 -
如果函数使用
new
关键字调用,this
指向新创建的对象。 -
如果函数作为对象的方法调用,
this
指向调用该方法的对象。 -
如果函数直接调用或使用箭头函数,
this
取决于函数的定义方式,可能指向全局对象或者是undefined
(在严格模式下)。 -
使用案例:
-
-
function Person(name) { console.log(this); // 在构造函数中,this指向新创建的对象 this.name = name; } const person1 = new Person('Alice'); // 输出构造函数中的this指向的新对象 console.log(person1.name); // 输出构造函数中创建的对象的name属性值 const car = { brand: 'Tesla', getBrand: function() { console.log(this); // 在对象方法中,this指向当前对象car return this.brand; } }; console.log(car.getBrand()); // 输出对象方法中的this指向的对象
-
注释:
-
第2行:在构造函数
Person
中输出this
的值,结果是新创建的对象实例。 -
第6行:将
name
属性绑定到新创建的对象实例上。 -
第9行:创建一个
Person
对象实例person1
。 -
第10行:输出
person1
对象的name
属性值,结果为 "Alice"。 -
第15行:在对象
car
的方法getBrand
中输出this
的值,结果为当前对象car
。 -
第18行:调用
car
对象的getBrand
方法,并输出其返回值,结果为 "Tesla"。
-
-
通过以上代码和注释,我们可以看到
this
关键字在不同的使用场景中指向不同的对象,包括新创建的对象、调用方法的对象、全局对象等。
-