一、原型与继承
1、原型
1)为什么要使用原型
JavaScript中存在大量的对象,用户也可以自己创建一些对象。但若是没有一种机制让这些对象联系起来,则难以实现面向对象编程中的许多特征。为此,JavaScript提供了原型的机制,作为JavaScript面向对象编程的一个重要体现。
利用原型还可以提高代码的复用性。
function Person(name){
this.name=name;
this.introduce=function() {};
}
var p1=new Person('Jim');
var p2=new Person('Alice');
console.log.(p1.introduce==p2.introduce); //输出结果:false
2)原型的使用方法
在JavaScript中,每定义一个函数,就随之有一个对象存在,函数通过prototype属性指向该对象。这个对象称之为原型对象,简称原型,如下:
function Person() {} //定义函数
console.log(typeof Person.prototype); //输出结果:object
2、继承
1)利用原型对象实现继承
原型对象是JavaScript实现继承的传统方式。如果一个对象中本来没有某个属性或方法,但是可以从另一个对象中获得,就实现了继承,具体示例如下:
function Person(name){
this.name=name;
}
Person.prototype.sayHello=function() {
console.log('你好,我是'+this.name);
}
var p1=new Person('Jim');
var p2=new Person('Tom');
p1.sayHello(); //输出结果:你好,我是Jim
p2.sayHello(); //输出结果:你好,我是Tom
2)利用Object.create()实现继承
Object对象的create()方法是ES5中新增的一种继承实现方式,如下:
var obj={
sayHello:function(){
console.log('我是一个带有sayHello方法的对象');
}
};
var newObj=Object.create(obj);
newObj.sayHello();
newObj._proto_===obj;
3)混入继承
混入就是将一个对象的成员加入到另一个对象中,实现对象功能的拓展。
var o1={};
var o2={name:'Jim'};
o1.name=o2.name;
console.log(o1.name);