您现在的位置:首页 >> 前端 >> 内容

prototype属性的作用介绍

时间:2018/4/26 14:26:40 点击:

  核心提示:js的每个对象都继承另一个对象,后者成为原型对象(prototype), 只有null没有自己的原型对象原型对象上的所有属性和方法,都能被派生对象所共享这就是java继承机制的基本设计通过构造函数生成...

js的每个对象都继承另一个对象,后者成为原型对象(prototype), 只有null没有自己的原型对象

原型对象上的所有属性和方法,都能被派生对象所共享这就是java继承机制的基本设计

通过构造函数生成实例对象是会自动分配原型对象,所以每一个构造函数都有一个prototype属性

这个属性就是实例对象的原型对象

function Food(name){

    this.name = name;

}

Food.prototype.rule  = 'energy';

var food1 = new Food('面包');

var food2 = new Food('牛奶');

构造函数Food的对象就是实例化对象为food1 和 food2 在原型对象上添加一个rule属性,结果就是所有的实例化对象都能读取该属性

可以通过改变Food.prototype.rule的值来改变实例化对象中的rule属性的值

原因:实例化对象没有rule这个属性,是读取原型对象的color属性,也就是说当实例化对象本身没有某个属性或方法时他会到构造函数prototype属性指向的对象中寻找属性和方法,这就是原型对象的特殊之处

如果实例对象自身就有某个属性和方法,则不会再去原型对象中寻找属性和方法

作用:就是定义所有实例化对象共有的属性和方法

Food.prototype.walk = function(){

    consol.log(this.name + can eat);

}

所有的对象都有自己的原形对象

var MyArray = function(){};

MyArray.prototype = new Array();

var mine = new MyArray();

mine.push(1,2,3);

mine.length; //3

mine.instanceof Array; //true

instanceof又来比较一个对象是否为某个构造函数的实例

constructor属性

默认指向prototype对象所在的构造函数

function P(){}

P.prototype.constructor === p ;

//true

由于constructor属性定义在prototype上面,也就是说可以被所有的实例化对象继承

function F(){};

var f = new F();

f.constructor === F;  //true

f.constructor === RegExp; //false

Object.getPrototypeOf() 获取对象原型的标准方法

Object.setPrototypeOf();设置对象原型返回一个对象

Tags:PR RO OT TO 
作者:网络 来源:Maybeno131