JS(十三)原型、原型链、call、apply、bind(上)
2018-03-13 本文已影响29人
StevenTang
写在最前面
原型
- 定义 : 原型是function对象的已个属性,它定义了构造函数造出的对象和公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象
- 利用原型特点和感念,可以提取公有属性
- 对象如何查看原型-->隐式属性proto
- 对象如何查看对象的构造函数-->constructor
// Person.prototype --原型
//这个是系统自带的一个属性叫 --> prototype翻译过来就是原型
//Person.prototype在这个函数刚刚出生的时候就被定义好了
//首先Person.prototype是一个对象
//Person.prototype = {};//是祖先
//可以理解为他就是一个空对象,它就相当于Person这个构造函数,构造出对象的父级
Person.prototype.name = "wu";//我这里在Person.prototype上定义一个name
function Person(){
}
var person = new Person();
//这里访问person.name -->打印出"wu"
prototype也可以用为共有属性
Person.prototype.name = "wu";
function Person(){
}
var person = new Person();
var person1 = new Person();
person.name; //打印出"wu"
person1.name; //也打印出"wu"
//都是通过Person这个构造函数的原型继承的
原型的特点
Person.prototype.name = "wu";
Person.prototype.say = function(){
console.log("hehe");
}
function Person(){
this.name = "shen";
}
var person = new Person();
person.name;//打印出"shen" 因为自己的函数里面有这个属性所以优先访问自己的
原型的应用
function Car(color,owner){
this.owner = owner;
this.carName = "BMW";
this.height = 1400;
this.lang = 4900;
this.color = color;
}
var car = new Car("red","prof.wu")
以上这些代码就完全可以把写死的属性用原型给提取出来
Car.prototype.carName = "BMW";
Car.prototype.height = 1400;
Car.prototype.lang = 4900;
function Car(color,owner){
this.owner = owner;
this.color = color;
}
var car = new Car("red","prof.wu");
var car1 = new Car("red","prof.shen");
原型的增删改查
Car.prototype.carName = "BMW";
Car.prototype.height = 1400;
Car.prototype.lang = 4900;
//也可以用这种写法
Car.prototype = {
carName = "BMW";
height = 1400;
lang = 4900;
}
function Car(color,owner){
this.owner = owner;
this.color = color;
}
var car = new Car("red","prof.wu");
//查
car.lang //打印出4900
//改
car.lang = "James";//修改不了,因为这样总是你在给car这个函数里面添加属性
除非
car.prototype.lang = "James";
//增
car.prototype.heavy = "1400KG";
//删除
delete car.prototype.lang
cnostructor
- constructor指向的是对应的构造函数
function Car(){
}
var car = new Car();
car.constructor//指向的是整个构造函数
//返回出 function Car(){}
修改constructor的指向
function Person(){
}
Car.prototype = {
//原本constructor是指向Car的
//现在我把他修改为
constructor : Person
}
function Car(){
}
var car = new Car();
car.constructor//指向的函数就是Person了
//返回的就是 function Person(){}