ES5中的原型和构造函数如何关联?

ES5中的原型和构造函数如何关联?

在ES5中,每个函数都有一个prototype属性,它指向一个对象,我们称之为原型对象。而每个对象都有一个__proto__属性,它指向该对象的原型对象。

构造函数是用来创建对象的函数,当我们使用构造函数创建一个对象时,它的__proto__属性会指向构造函数的prototype属性。

function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person.prototype.sayHello = function() {
  console.log('Hello, my name is ' + this.name);
}

var person1 = new Person('Tom', 20);
console.log(person1.__proto__ === Person.prototype); // true

在上面的代码中,我们定义了一个Person构造函数,并给它的prototype属性添加了一个sayHello方法。然后我们使用new关键字创建了一个person1对象,可以看到person1的__proto__属性指向了Person.prototype。

原型链

在ES5中,对象的原型对象也可以有自己的原型对象,这样就形成了原型链。

function Animal() {}

function Cat() {}

Cat.prototype = new Animal();

var cat1 = new Cat();
console.log(cat1.__proto__.__proto__ === Animal.prototype); // true

在上面的代码中,我们定义了一个Animal构造函数和一个Cat构造函数。然后我们将Cat的prototype属性指向了一个Animal的实例,这样Cat的实例cat1就可以访问Animal的原型对象了。

总结:在ES5中,构造函数通过prototype属性与原型对象关联,而对象通过__proto__属性与原型对象关联,通过原型链,对象可以访问原型对象的属性和方法。

猿教程
请先登录后发表评论
  • 最新评论
  • 总共0条评论