每个函数对象都会有一个phototype属性,这个属性指向的对象为原型对象。
这个函数如果作为普通函数调用,则原型函数没有任何作用;如果作为构造函数调用,那么它的实例就会拥有一个隐含的属性__poroto__,也叫做隐式原型,隐式原型指向构造函数的原型对象。
function Dog(name,color,age){
this.name = name;
this.color = color;
this.age = age;
}
Dog.prototype.run = function () {
console.log('我可以跑')
}
Dog.prototype.eat = function () {
console.log('我很能吃')
}
function Corky(name,color,age){
Dog.call(this,name,color,age);
}
// 原型链式继承 让子类的原型指向父类的一个实例
Corky.prototype = new Dog();
//我们需要手动的将Corky原型上的构造器属性 重新指向Corky
Corky.prototype.constructor = Corky();
var d1 = new Dog('wangcai','black',12);
var c1 = new Corky('duomi','write',8);
d1.run();
c1.run();
console.log(d1);
console.log(c1);
我们定义了Dog构造函数,里面定义了狗的一些属性,姓名,颜色、年龄等;定义了Corky构造函数,用call()方法继承了Dog的属性;为Dog定义了原型方法,通过更改Corky的原型对象,让它来继承Dog的原型方法,所以Corky也拥有了dog的跑、跳方法。但此时Corky的constructor属性找不到它对应的构造函数,所以我们需要手动指向Corky
图解
这是对上面代码解说的一个图解