欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Javascript 继承 (七)

程序员文章站 2022-05-25 15:05:32
...

混合使用原型继承和复制属性

当使用继承时,更多的是想在现有的功能中去扩展。意思就是创建一个对象并继承已经存在的对象,然后添加额外的属性和方法。可以结合上几讲的内容

  1. 用prototype方式继承去复制一个存在的对象。
  2. 复制另一个对象的所有属性。

 

function objectPlus(o, stuff) {
  var n;
  function F() {}
  F.prototype = o;
  n = new F();
  n.uber = o;
  for (var i in stuff) {
    n[i] = stuff[i];
  }
  return n;
}

 

这个函数是一个对象o被继承,另一个对象stuff添加额外的方法和属性。让我们看看实例

 

var shape = {
  name: 'shape',
  toString: function() {return this.name;}
};
 

 新建一个2D对象继承shape再添加额外的属性。

 

var twoDee = objectPlus(shape, {
  name: '2D shape',
  toString: function(){return this.uber.toString() + ', ' + this.name}
});

 

 再创建一个triangle的对象。

var triangle = objectPlus(twoDee, {
  name: 'Triangle',
  getArea: function(){return this.side * this.height / 2;},
  side: 0,
  height: 0
});

 让我们来测试一下代码

 

var my = objectPlus(triangle, {side: 4, height: 4});
my.getArea();//8
my.toString();//shape, 2D shape, Triangle, Triangle
 

 发现了 Triangle的有两个。因为我们的实例继承triangle.我们可以把代码改为

var my = objectPlus(triangle, {side: 4, height: 4,name: 'My 4x4'});
my.getArea();//8
my.toString();//shape, 2D shape, Triangle,My