在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__属性与原型对象关联,通过原型链,对象可以访问原型对象的属性和方法。
本文为翻滚的胖子原创文章,转载无需和我联系,但请注明来自猿教程iskeys.com