`
风雪涟漪
  • 浏览: 496821 次
  • 性别: Icon_minigender_1
  • 来自: 大连->北京
博客专栏
952ab666-b589-3ca9-8be6-3772bb8d36d4
搜索引擎基础(Search...
浏览量:8764
Ae468720-c1b2-3218-bad0-65e2f3d5477e
SEO策略
浏览量:17659
社区版块
存档分类
最新评论

Javascript 继承 (七)

阅读更多

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

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

  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

 

 

 

分享到:
评论
2 楼 lzazmy 2009-12-22  
哦 不好意思 是在IE8中显示的有问题 呵呵 用别的浏览器就好了 嘿嘿
1 楼 lzazmy 2009-12-22  
晕怎么返回的东西和你说的不一样呢

相关推荐

Global site tag (gtag.js) - Google Analytics