gpt4 book ai didi

javascript - 如何理解CoffeeScript的 `extends`关键字生成的JavaScript代码

转载 作者:数据小太阳 更新时间:2023-10-29 06:07:48 24 4
gpt4 key购买 nike

这是由 CoffeeScript 的 extends 关键字生成的 JavaScript 代码。原型(prototype)链是如何设置的?

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;
};

最佳答案

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 (我自己的博文)

关于javascript - 如何理解CoffeeScript的 `extends`关键字生成的JavaScript代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10867382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com