gpt4 book ai didi

backbone.js - 在 CoffeeScript 中,这两种创建主干模型、 View 等的方式有什么区别

转载 作者:行者123 更新时间:2023-12-01 11:51:15 27 4
gpt4 key购买 nike

我目前正在研究 coffee-script,因为它的语法比纯 javascript 更好,也更容易编写/理解。但是我发现使用 backbone 和 coffee-script 的教程显示创建模型的方法如下:

class User extends Backbone.Model
initialize: ->
alert 'start'

这看起来不错,但是当使用 extends 时,它编译起来很奇怪......我知道这是 coffee-script 使类在 javascript 中工作的方式。

(function() {
var User,
__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; };

User = (function(_super) {

__extends(User, _super);

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

User.prototype.initialize = function() {
return alert('start');
};

return User;

})(Backbone.Model);

}).call(this);

但是如果你使用:

User = Backbone.Model.extend
initialize: ->
alert 'start'

编译得更好(更像我写的那样):

(function() {
var User;

User = Backbone.Model.extend({
initialize: function() {
return alert('start');
}
});

}).call(this);

谁能向我解释创建模型类的方式的差异,以及为什么第一种方法在教程中更常用,而第二种方法的编译更像我在纯 javascript 中创建模型的方式?

最佳答案

这两种方法在功能上是等价的,它们的工作方式没有显着差异。当然,存在一些实现差异,但最终结果是相同的。

真正的区别,以及为什么您从 coffeescript extends 关键字中看到更大的代码生成,是当您调用 Backbone.Model.extend 时,您调用的是 Backbone 的CoffeeScript 生成的相同代码的版本。它被封装在 Backbone 的 extend 方法中,但它在工作方式和原因上大体相似。

您看到到处都在使用 CoffeeScript extends 的唯一原因是因为您正在查看 CoffeeScript 示例。老实说,就是这样。以一种或另一种方式进行操作没有任何好处。只是 CoffeeScript 说你应该使用 extends 关键字,所以人们会那样做。

关于backbone.js - 在 CoffeeScript 中,这两种创建主干模型、 View 等的方式有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11301806/

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