在CoffeeScript中定义私有成员变量

栏目: CoffeeScript · 发布时间: 7年前

内容简介:在CoffeeScript中定义私有成员变量

最近花了一些时间把CoffeeScript学习了一下, 说实话, 习惯了原生Javascript的语法和格式, 对于Coffee还真有点不太适应: 一是在Coffee里基本上都不会去写分号和括号, 大括号啥的(对于一个有分号强迫症的人来说, 这还真得适应一段时间); 然后就是, 使用类似于 Python 的那种语法格式, 通过代码缩进来让编译器进行推导.

不过, 本文的主要目的当然不是不是吐槽Coffee, 而是我在看文档的过程中, 遇到了一个问题, 查阅了一些资料后, 还是解决了我心中的疑惑, 于是便拿出来分享一下.

在Coffee的官方文档中, 有下面这样一段代码(我截取了其中的一小部分, 在文档的 Classes, Inheritance, and Super部分 ):

class Animal
    constructor: (@name) ->
    
    move: (meters) ->
        alert @name + " moved #{meters}m."

这段Coffee所对应的Javascript如下(我也只是截取了一小部分):

Animal = (function() {
    function Animal(name) {
        this.name = name;
    }

    Animal.prototype.move = function(meters) {
        return alert(this.name + (" moved " + meters + "m."));
    };

    return Animal;
})();

那么问题来了. constructor 是Animal类的构造函数, 这个没什么问题, 然后, 在Animal这个类里, 定义了一个 move 方法, 按理说这个方法属于Animal类. 当然, 确实属于. 但是, 奇怪的是, 为什么它会默认添加到Animal的 prototype 上去呢?

一开始, 我以为是 constructor 在作怪, 就把 constructor 这一块去掉了, 就像这样:

class Animal
    move: (meters) ->
        alert @name + " moved #{meters}m."

但事实证明, 我的想法是完全错误的. 这段Coffee所编译出来的Javascript中, move 方法还是在 Animal.prototype 上.

然后, 我在 move 方法下面又定义了一些变量和方法, 但无一例外, 全部都附加到了 Animal.prototype 上.

于是, 我上Google去查了一下, 看到了一篇比较好的文章说了这个问题: Using private methods in CoffeeScript .

那么, 如果要在Coffee中定义私有成员变量的话, 该怎么做呢?

其实很简单, 就像下面这样:

class Animal
    constructor: (@name) ->
    
    publicMethod: ->
        'this is a public method'
    
    privateMethod = ->
        'this is a private method'
        
    privateVariable = 'private'

所以, 不难看出来, 在Coffee中定义公有成员和私有成员的差别就是使用 : 还是 = . 所以, 通过使用 = , 我们就可以在Coffee中为类定义私有成员变量了.


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Practical Algorithms for Programmers

Practical Algorithms for Programmers

Andrew Binstock、John Rex / Addison-Wesley Professional / 1995-06-29 / USD 39.99

Most algorithm books today are either academic textbooks or rehashes of the same tired set of algorithms. Practical Algorithms for Programmers is the first book to give complete code implementations o......一起来看看 《Practical Algorithms for Programmers》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具