这是CoffeeScript的extends
关键字生成的JavaScript代码。原型链如何设置?
var __hasProp = Object.prototype.hasOwnProperty,
__extends = function(child, parent) {
for (var key in parent) {
if (__hasProp.call(parent, key)) child[key] = parent[key];
}
function ctor() { this.constructor = child; }
ctor.prototype = parent.prototype;
child.prototype = new ctor;
child.__super__ = parent.prototype;
return child;
};
答案 0 :(得分:7)
var __hasProp = Object.prototype.hasOwnProperty,
__extends = function(child, parent) {
// Copy "static" attributes from the parent constructor to the child constructor
for (var key in parent) {
if (__hasProp.call(parent, key)) child[key] = parent[key];
}
// This is the surrogate constructor, used so you don't need
// to instantiate an instance of the parent just to setup the prototype chain
// the statement in the surrogate constructor properly attaches
// the constructor property to object
function ctor() { this.constructor = child; }
// Attach the parent's prototype to the surrogate constructor
ctor.prototype = parent.prototype;
// This is setting up the chain, attaching an instance of a constructor whose
// prototype is set to the parent to the prototype property of the child
// In naive implementations, this would be child.prototype = new parent();
child.prototype = new ctor;
// Allows access to the parent from user code, and used by the `super` keyword
child.__super__ = parent.prototype;
return child;
};
请参阅http://js-bits.blogspot.com/2010/08/javascript-inheritance-done-right.html(我自己的博文)