2.创建一个Person()构造函数,通过该构造函数创建实例对象p,在控制台输出实例对象p的原型对象和构造函数的原型对象。
时间: 2023-12-10 14:40:51 浏览: 54
以下是创建Person()构造函数并输出实例对象和构造函数原型对象的代码:
```javascript
function Person(name, age) {
this.name = name;
this.age = age;
}
let p = new Person("John", 30);
console.log(p.__proto__); // 输出实例对象p的原型对象
console.log(Person.prototype); // 输出构造函数Person的原型对象
```
输出结果如下:
```
Person {}
{ constructor: Person }
```
解释一下:实例对象p的原型对象是一个空的Person对象,而构造函数Person的原型对象包含了一个constructor属性,指向构造函数本身。
相关问题
创建一个构造函数并生成实例并打印出构造函数的原型与实例的原型
好的,以下是代码实现:
```javascript
// 创建一个构造函数
function Person(name, age) {
this.name = name;
this.age = age;
}
// 在构造函数的原型上添加方法
Person.prototype.sayHello = function() {
console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
}
// 生成实例
const person1 = new Person('Tom', 30);
// 打印构造函数的原型
console.log(Person.prototype);
// 打印实例的原型
console.log(Object.getPrototypeOf(person1));
```
输出结果如下:
```
Person { sayHello: [Function] }
Person { sayHello: [Function] }
```
可以看到,构造函数 `Person` 的原型上有一个 `sayHello` 方法,而实例 `person1` 的原型指向了构造函数的原型,因此它也可以访问到 `sayHello` 方法。
请简述实例对象、原型对象及构造函数之间的关系及互相访问的方法
在 JavaScript 中,每个对象都有一个原型对象和一个构造函数。实例对象是通过构造函数创建的。构造函数是一个特殊的函数,它用来创建对象。构造函数定义了对象的属性和方法,当我们使用 new 操作符创建实例对象时,实例对象会自动继承构造函数的属性和方法。
原型对象是一个普通的对象,它包含构造函数的属性和方法。每个实例对象都可以通过原型对象来访问和继承构造函数的属性和方法。也就是说,原型对象是所有实例对象的公共祖先,它们共享同一个原型对象。
构造函数可以通过 this 关键字来访问实例对象的属性和方法。而实例对象可以通过点操作符或方括号操作符来访问原型对象的属性和方法。
例如,我们可以定义一个构造函数 Person,然后通过它创建多个实例对象:
```javascript
function Person(name, age) {
this.name = name;
this.age = age;
}
// 创建实例对象
var person1 = new Person('Alice', 25);
var person2 = new Person('Bob', 30);
```
在上面的例子中,Person 就是一个构造函数,它定义了两个属性 name 和 age。通过 new 操作符创建的 person1 和 person2 就是实例对象。
每个实例对象都有一个 __proto__ 属性,它指向构造函数的原型对象。我们可以通过实例对象的 __proto__ 属性来访问原型对象的属性和方法:
```javascript
console.log(person1.__proto__ === Person.prototype); // true
console.log(person2.__proto__ === Person.prototype); // true
```
我们也可以通过构造函数的 prototype 属性来访问原型对象的属性和方法:
```javascript
console.log(Person.prototype.sayHello); // [Function: sayHello]
// 通过实例对象的 __proto__ 属性访问原型对象的属性和方法
console.log(person1.__proto__.sayHello()); // Hello, my name is Alice
// 通过构造函数的 prototype 属性访问原型对象的属性和方法
console.log(Person.prototype.sayHello()); // Hello, my name is undefined
```
在上面的例子中,我们定义了一个 sayHello 方法,并将它添加到了 Person 的原型对象中。我们可以通过实例对象的 __proto__ 属性或构造函数的 prototype 属性来访问该方法。需要注意的是,通过构造函数的 prototype 属性访问该方法时,this 关键字将指向 undefined,因为我们没有指定 name 属性。