gpt4 book ai didi

node.js - coffeescript 中的 'extends' 和 node.js 中的 'util.inherits' 之间的区别

转载 作者:IT老高 更新时间:2023-10-28 23:05:08 25 4
gpt4 key购买 nike

我最近在学习 Node.js。我对 Node.js 中的函数 util.inherits 有疑问。我可以在 CoffeeScript 中使用 extends 来替换它吗?如果不是,它们之间有什么区别?

最佳答案

是的,您可以使用 extends 代替它。

至于区别?让我们先来看看 CoffeeScript:

class B extends A

我们来看看the JavaScript the CoffeeScript compiler produces对于这个 JavaScript:

var B,
__hasProp = {}.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; };

B = (function(_super) {

__extends(B, _super);

function B() {
return B.__super__.constructor.apply(this, arguments);
}

return B;

})(A);

所以,__extends用来声明BA的继承关系。

让我们在 CoffeeScript 中重述 __extends 的可读性:

coffee__extends = (child, parent) ->
child[key] = val for own key, val of parent

ctor = ->
@constructor = child
return
ctor.prototype = parent.prototype

child.prototype = new ctor
child.__super__ = parent.prototype

return child

(您可以通过 compiling it back to JavaScript 来检查这是不是一个忠实的复制品。)

这是发生了什么:

  1. 直接在 parent 上找到的所有键都设置在 child 上。
  2. 创建了一个新的原型(prototype)构造函数 ctor,其实例的 constructor 属性设置为子级,其 prototype 设置为父级.
  3. 子类的prototype 设置为ctor 的实例。 ctorconstructor 会被设置为 child,而 ctor 的原型(prototype)本身就是 parent
  4. 子类的 __super__ 属性设置为 parentprototype,供 CoffeeScript 的 super 关键字使用.

node's documentation util.inherits 描述如下:

Inherit the prototype methods from one constructor into another. The prototype of constructor will be set to a new object created from superConstructor.

As an additional convenience, superConstructor will be accessible through the constructor.super_ property.

总之,如果您使用的是 CoffeeScript 的类,则不需要使用 util.inherits;只需使用 CS 为您提供的工具,您就可以获得 super 关键字等奖励。

关于node.js - coffeescript 中的 'extends' 和 node.js 中的 'util.inherits' 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10679276/

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