js的原型

prototype

1
2
3
4
5
6
7
8
9
10
11
function Person(name,sex,age){
this.name = name;
this.sex = sex;
this.age = age;
this.say = function(){
console.log('hi');
};
}

var p1 = new Person('jack','male',18);
var p2 = new Person('alice','female',18);

对于say方法,p1,p2都一样,就不必创建两次函数了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function Person(name,sex,age){
this.name = name;
this.sex = sex;
this.age = age;
this.say = say;
}
//这个函数只定义了一次
function say(){
console.log('hi');
}

var p1 = new Person('jack','male',18);
var p2 = new Person('alice','female',18);
p1.say();
p2.say();

上述还是太麻烦,这时候原型的意义出现了prototype

创建每一个函数都有一个prototype属性,这个属性其实是一个指针,而这个指针总是指向一个对象。这个对象的用途就是将特定的属性和方法包含在内,起到一个所有实例所共享的作用。

1
2
3
4
5
function Person(){

}
//var obj = Person.prototype;
//Person.prototype这个对象obj可以将特定的属性和方法包含在内

使用原型prototype

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Person(name,sex,age){
this.name = name;
this.sex = sex;
this.age = age;
}

Person.prototype.say = function(){
console.log(this.name);
};

var p1 = new Person('jack','male',18);
var p2 = new Person('alice','female',18);
p1.say();
p2.say();

原型对象和构造函数的关系

1
2
3
4
构造函数.prototype = 原型对象
原型对象.constructor = 构造函数

实例对象.prototype = 原型对象

什么是原型?