JavaScript中对象的继承及扩展功能

1 继承的概念函数

在原型链中能够说一个对象是继承于它的原型对象的,因此继承是原型链的一种具体应用.性能

当对象给它自身的属性和方法赋值时,会在内存空间中开辟一个位置存储这些属性和方法,可是每一个对象都须要单独开辟空间的话,会极大的消耗内存影响网页的加载速度.优化

原型对象中的方法和属性可以共享给实例使用,咱们可使用这个优势来实现内存的优化.而在这一系列实现过程就是继承.prototype

2 继承的具体实现方式对象

1. 扩展原型对象继承

指经过构造函数.prototype的方式给原型对象添加少许的新属性或者新方法.内存

示例:原型链

function Student(){};//建立函数原型

Student.prototype.say = function(){};//给原型对象添加say方法io

var s1 =new Student();//建立一个Student类型的对象

s1.say();//等价于s1.__proto__.say();

2. 替换原型对象

在使用扩展原型对象方式来给原型对象添加多个新属性或者新方法时,就会出现冗余代码,这时咱们就能够直接将原型对象替换成新的对象.

替换原型对象就是直接使用一个新对象将原原型对象替换掉.

示例:

function Person (){};//建立函数
Person.prototype={//给函数的原型对象赋值新的对象
  a:function(){},
  b:function(){},
  c:function(){},
  constructor:Person
};
var p1 =new Person();//建立一个Person类型的实例
注意:新替换后的原型对象自己再也不有constructor属性指向对应的构造函数了,因此咱们须要在新对象中手动添加该属性和属性值.
3. 混入继承

将一个对象中的功能拷贝一份给另外一个对象.

示例:

var p1 = {
  a:function(){},
  b:function(){}
}//建立对象p1
var p2 = {name:"sad"};//建立对象p2
for(var key in p1){
  p2[key]=p1[key];
}//将p1对象中的属性值逐个赋值给p2对象对应属性名

注意:这个过程不改变原对象,目标对象将会得到新属性和方法,若是出现属性名或者方法名冲突的话,目标对象中的原属性或者方法会被替换成新的属性或者方法.

4. 原型+混入继承

原型+混入继承其实就是在混入继承的基础上将目标对象拓展成了原型对象,其余实现过程和结果不发生改变.

示例:

var p = {name:"",age:12};//建立对象p
function Person(){};//建立函数
for(var key in p){
  Person.prototype[key]=p[key];
}//将p对象中的属性值逐个赋值给原型对象对应的属性名

5. 经典继承

建立一个对象继承自另外一个对象.

实现步骤:

a 建立对象须要一个媒介,那就是构造函数,因此须要先建立一个构造函数

b 设置这个函数的原型对象,使源对象替换原来的原型对象

c 经过构造函数建立出新的实例对象,并将这个对象返回

结合以上三个步骤咱们能够封装成一个函数:

function create(source){
  function fn(){};//自定义建立构造函数
  fn.prototype = source;//将源对象赋值给构造函数的原型对象
  return new fn;//使用构造函数建立新的实例,并返回
}

总结:继承功能的使用极大的避免了建立新对象时重复开辟内存空间,也能够减小全局变量的使用.

相关文章
相关标签/搜索