1

我有这个执行警报的演示,它运行良好:

在代码下方。

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'));

提醒班级的名称,shape或者TwoDShape我无法成功显示class.name 为什么?

这是完整的代码: ​</p>

4

2 回答 2

1

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

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

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

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

请参阅我在扩展原型上创建的 jsfiddle http://jsfiddle.net/4Bjjp/6/

于 2012-09-20T09:15:17.687 回答
0

您的代码中断,因为extend函数不存在。您必须实施自己的才能使其工作。这是一个简单的实现。

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

  return destination;
}
于 2012-09-20T09:05:55.077 回答