const person1 = { name: "John", age: 30, greet: function() { console.log("Hello, my name is " + this.name + " and I am " + this.age + " years old."); } }; const person2 = { name: "Jane", age: 25 }; person1.greet.call(person2);
时间: 2024-03-29 08:35:08 浏览: 16
这段代码的作用是将 person2 对象作为参数传给 person1 对象的 greet 方法,并使用 call 方法来确保 this 关键字在 greet 方法中指向 person2 对象,从而输出 "Hello, my name is Jane and I am 25 years old." 这句话。这个例子展示了如何使用 call 方法来更改函数中的 this 关键字的指向。
相关问题
bind里面传this指针是什么意思
在JavaScript中,bind()方法用于创建一个新的函数,该函数与原始函数具有相同的函数体,但是在该函数中,this关键字的值被绑定到传递给bind()方法的第一个参数。这意味着,当调用新函数时,它将始终使用传递给bind()方法的对象作为this值,而不是调用新函数的上下文对象。
例如,如果我们有一个对象person,并且我们想要创建一个新函数,该函数总是使用person作为this值,我们可以使用bind()方法来实现:
```
const person = {
name: "John",
age: 30,
greet: function() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
};
const greetPerson = person.greet.bind(person);
greetPerson(); // 输出: Hello, my name is John and I am 30 years old.
```
在上面的示例中,我们使用bind()方法创建了一个新函数greetPerson,并将person作为第一个参数传递给bind()方法。因此,当我们调用greetPerson()函数时,它使用person作为this值,并输出相应的问候语。
用js原型模式创建一个对象,编写三段代码
代码1:创建一个名为Person的构造函数,包含name和age属性和一个greet方法。
```javascript
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.greet = function() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
};
```
代码2:创建一个名为Student的构造函数,它继承自Person,包含一个major属性和一个study方法。
```javascript
function Student(name, age, major) {
Person.call(this, name, age);
this.major = major;
}
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
Student.prototype.study = function() {
console.log(`I am studying ${this.major}.`);
};
```
代码3:创建一个Person和Student对象并调用它们的方法。
```javascript
const person = new Person('John', 30);
person.greet(); // 输出:Hello, my name is John and I am 30 years old.
const student = new Student('Jane', 20, 'Computer Science');
student.greet(); // 输出:Hello, my name is Jane and I am 20 years old.
student.study(); // 输出:I am studying Computer Science.
```