原型定义:
原型是function对象的一个属性,它定义了构造函数制造出的对象的公共祖先。
通过构造函数产生的对象,可以继承该原型的属性和方法。
原型是对象属性prototype对应的值。
注:原型是一个对象。
我们可以直接在构造函数的prototype上直接添加属性,也可以将构造函数的prototype指向一个对象,如下:
在原型上添加属性和方法后,通过构造函数生成的对象可以直接使用原型上的属性及方法(优先使用自己的)。
function Man() {
}
Man.prototype.sex = "man" //直接添加属性
Man.prototype.saySex = function () {
console.log("I am " + this.sex);
}
var man = new Man();
man.saySex(); // I am man
function Woman() {
}
Woman.prototype = { //指向一个对象
sex: "woman",
saySex: function () {
console.log("I am " + this.sex);
},
constructor: Woman //由于指向的新对象中没有constructor,所以添加了指向构造函数的constructor,这个值可以不添加
};
var woman = new Woman();
woman.saySex(); // I am woman
上图为控制台打印结果,在原型上添加属性和将原型指向一个对象(对象中添加了指向构造函数的constructor)是一样的(初学前端,如有错误还望指教)。
.
对象查看原型:隐式属性 __proto __
如:man.__proto __ ==> Man.prototype
原型链:通过prototype将原型连成的链就是原型链,如下:
GrandFather.prototype.name = "zhang";
function GrandFather(){
}
var grandFather = new GrandFather();
grandFather.sayName = function(){
console.log(this.name);
}
Father.prototype = grandFather; // 将grandFather作为Father的原型
function Father(){
}
var father = new Father();
Son.prototype = father; // 将father作为Son的原型
function Son(){
}
var son = new Son();
son.sayName(); // 输出 zhang
.
没有继承Object.prototype的对象:Object.create(null)
var obj1 = Object.create(null);
var obj2 = {};
var obj3 = new Object();
如上所示,只有obj1没有继承Object