gpt4 book ai didi

javascript - Backbone.Model.extend() 与 class X extends Backbone.Model 之间有什么区别?

转载 作者:行者123 更新时间:2023-11-29 22:12:40 26 4
gpt4 key购买 nike

在 JavaScript 中,我将不得不使用

Backbone.Model.extend()

为我的模型创建一个“类”。但是在 CoffeeScript 中我可以使用

class X extends Backbone.Model

2 之间有什么区别。有什么理由我应该使用一个而不是另一个吗?

一个简单的测试,看看有什么区别 http://jsfiddle.net/jiewmeng/t6ZPd/

Test = Backbone.Model.extend()
class Test2 extends Backbone.Model

console.log Test
/*
function (){return i.apply(this,arguments)}
*/

console.log Test2
/*
function Test2() {
_ref = Test2.__super__.constructor.apply(this, arguments);
return _ref;
}
*/

我相信它没有显示所有代码...但是 extends() 似乎稍微简单一些。只是好奇还有其他区别吗?

最佳答案

coffeescript 在闭包顶部创建 extends 方法:

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

下划线是这样定义的:http://underscorejs.org/docs/underscore.html#section-76

实现略有不同,但效果是一样的。

如果您正在使用 Backbone 或更具体地说是 Underscore,您可以选择执行任何一种方法,但 coffeescript 中的 extends 允许您扩展任何类,而无需像 Underscore 或 Backbone 这样的依赖项。

在使用 backbone 时,您可以使用该方法执行的操作的一个示例可能是覆盖构造函数以向 backbone 在其选项对象中不支持的类提供可选项

class MyView extends Backbone.View
constructor: (foo, bar, options)->
# locals foo and bar are now assigned
@foo = foo
@bar = bar
super(options) # calls to Backbone.View with the normal options

myView = new MyView("foo","bar", {model: someModel, el: $('#someEl')})
myView.foo # "foo"
myView.model == someModel # true

关于javascript - Backbone.Model.extend() 与 class X extends Backbone.Model 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17259999/

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