原型对象
在JavaScript中,每个构造函数都有一个原型对象存在,这个原型对象通过构造函数的prototype属性来访问,示例代码如下。
function Person() {} // 定义函数
console.log(Person.prototype); // 输出结果:{constructor: ƒ}
console.log(typeof Person.prototype); // 输出结果:object
在上述代码中,Person函数的prototype属性指向的对象就是Person的原型对象。
利用原型对象,可以实现为所有的实例对象共享实例方法,我们可以将实例方法定义在原型对象中,然后所有的实例方法就都可以访问原型对象的方法了。因此,原型对象其实就是所有实例对象的原型。下面我们通过代码演示原型对象的使用。
1 function Person(uname) {
2 this.uname = uname;
3 }
4 Person.prototype.sayHello = function() {
5 console.log('你好,我叫' + this.uname);
6 };
7 var p1 = new Person('张三');
8 var p2 = new Person('李四');
9 console.log(p1.sayHello === p2.sayHello); // 输出结果:true
10 p1.sayHello(); // 输出结果:你好,我叫张三
11 p2.sayHello(); // 输出结果:你好,我叫李四
从上述代码可以看出,实例对象p1和p2原本没有sayHello()方法,但是在为原型对象添加了sayHello()方法以后,p1和p2就都拥有了sayHello()方法,并且是同一个方法。在原型对象的方法中,this表示的是调用此方法的实例对象。