每个函数/对象都有一个prototype(原型)属性
指针指向的就是prototype对象
所有创建在prototype上的属性和方法
都将被所有对象实例分享
构造函数和原型混合使用
使用构造函数定义对象的属性,使用原型(prototype)定义对象的方法,这样就可以做到属性私有,方法共享
书写语法 构造函数名.prototype.xxx = xxx ;
function Dog(type){
this.type=function(){
console.info("类型:"+type);
};
}
Dog.prototype.name="我是小狗"
var pp = new Dog("大型犬");
var cc = new Dog("小型犬");
console.info(pp.name==cc.name);
pp.type()
cc.type()
继承
function Animal(name) {
this.name = name;
this.eat = function () {
console.info("动物吃东西了!");
}
}
function Dog(name) {
this.name = name;
}
Dog.prototype = new Animal("狗");
var erHa = new Dog("哈士奇");
console.info(erHa.name);// 输出“哈士奇”
delete erHa.name;
console.info(erHa.name);// 输出“狗”
delete Dog.prototype.name;
console.info(erHa.name);// 输出“undefined”
erHa.eat();// 输出“动物吃东西了!”
erHa.eat = function () {
console.info("狗吃肉!");
}
erHa.eat();// 输出“狗吃肉!”
原型链 层层指向父原型的关系,可以用来查找对象之间的继承关系
function a(x){
this.x=x;
}
a.prototype.x=0;
function b(x){
this.x=x;
}
b.prototype=new a(1);
function c(x){
this.x=x;
}
c.prototype=new b(2);
var d = new c(3);
console.info(d)
console.info(d.x)
delete d.x
console.info(d.x)
delete c.prototype.x
console.info(d.x)
delete b.prototype.x
console.info(d.x)
delete a.prototype.x
console.info(d.x)