如何提醒类Shape的名称,TwoDShape?

时间:2012-09-20 08:51:33

标签: javascript inheritance prototype

我有这个Demo执行警报并且运行良好:

在代码下方。

var Shape = function(){};
var TwoDShape = function(){};
Shape.prototype.name = 'shape';
Shape.prototype.toString = function(){return this.name;};

alert('there is alert');​

当我添加此行时:extend(TwoDShape, Shape);

我无法执行提醒,因为您可以看到Demo

之后我添加了一行:

var my = new TwoDShape();
alert(my.toString());
alert(TwoDShape.prototype.name);
alert(my.hasOwnProperty('name'));

提醒班级shapeTwoDShape的名称但我无法成功显示 class.name为什么?

here is the full code:

2 个答案:

答案 0 :(得分:1)

首先,代码中没有函数extend(),因此代码在那里遇到错误并停止运行。

所以我使用jQuery $.extend()修复它,或者你可以自己编写extend()(参见Jimmy的回答)。

其次,如果您希望所有Shape / TwoDShape实例都可以使用name访问类toString(),则需要扩展原型:

TwoDShape.prototype = $.extend(TwoDShape.prototype, Shape.prototype);

在扩展原型

上查看我创建的http://jsfiddle.net/4Bjjp/6/的jsfiddle

答案 1 :(得分:0)

您的代码中断因为extend函数不存在。你要实现自己的工作。这是一个简单的实现。

function extend(destination, source) {
  for (var key in source) {
    if(source.hasOwnProperty(key)) {
      destination[key] = source[key];
    }
  }

  return destination;
}