gpt4 book ai didi

javascript - CoffeeScript 类变量可见性

转载 作者:行者123 更新时间:2023-12-02 17:08:44 25 4
gpt4 key购买 nike

我有这样的东西:

class @Cat
defaults:
name: ''
weight: 0
constructor: ( @options ) ->
$.each @.defaults, (key, val) =>
@options[key] = val unless @options.hasOwnProperty(key)

我想用

$.each (array, callback), (index, value) ->

而不是

$.each (array, callback), (index, value) =>

并使用类变量@options,但显然@指的是数组。解决方案?

最佳答案

看来您在访问属于该类实例的选项时遇到了问题,对吗?

你知道这是因为 jQuery.eachthis 设置为 val 变量的对象包装版本,因此 @options 在该回调中不起作用。

在下面的示例中,细微的变化是我关闭了变量 opts 上的 each 回调,这将允许您的循环引用@options 即使this 已更改。

class Cat
defaults:
name: 'tabby'
weight: 5

constructor: (@options) ->
opts = @options
$.each @defaults, (key, val) ->
opts[key] = val unless opts.hasOwnProperty(key)

c = new Cat(name: 'fluffy')
console.log c.options

注意,不需要双箭头:)在您的情况下,双箭头不会有什么坏处,因为您访问的是变量 val 而不是使用 @ 来访问引用当前迭代的值,但在不是绝对必要时尝试摆脱 => 是正确的。

尝试一下这个 fiddle :http://jsfiddle.net/chicagogrooves/72fa3/

也就是说,我想提一下,对于覆盖默认值的情况,您可以使用 jquery.extend而不是手动编写循环。这是很常见的事情,它是许多库的一部分,而不是您通常需要手动编写的东西。但我想更彻底地解释,因为双箭头和 this 是需要了解的好概念。

关于javascript - CoffeeScript 类变量可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25013334/

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