我的程序中有一些基本对象类。它们具有功能和数据字段。我刚刚意识到如果我在construct
方法之外声明一些默认数据字段值,那么它们将不会在object = new Class params
种初始化时重置。
class Book extends DBNode
language: 'en'
title: ''
year: 0
# function
bookReaded: (callback)->
# db stuff
callback()
ie:在这种情况下,创建一个新的Book obj,然后编辑它的标题将导致以下实例被初始化,标题字段已经设置为最后一个实例的值。
class Book extends DBNode
constructor: ->
@language: 'en'
@title: ''
@year: 0
super(props, user, cb)
# function
bookReaded: (callback)->
# db stuff
callback()
在这种情况下,每次都会正确重置字段,并且每次初始化时标题字段都将设置为空白。
嗯 - 你会说 - 显然:它们是原型。你会说。我明白了......现在。
无论如何,这件事对我来说仍然有点模糊,所以我想问一下,如果只是声明构造函数中的所有变量字段足以提供所需的所有跨实例安全性,或者是否还有其他一些应该是在处理原型而不是简单的对象时要记住。
由于我正在使用服务器端,我主要担心的是同时执行可能会破坏这种全局范围情况的东西,以及我是否应该考虑只使用普通对象(我确实使用了继承)某些功能的优点,但没有任何额外的代码行无法实现)...
答案 0 :(得分:1)
只是声明构造函数中的所有变量字段足以提供所需的所有跨实例安全性
它不是关于安全性,而是关于功能性。但是,是的,如果你在构造函数中分配所有可变属性,那么你就是安全的一面(对于你的例子中的原始值,它实际上并没有产生影响)。
由于我在服务器端使用它,我主要担心的是同时执行的东西
JavaScript中没有同时执行代码。甚至不在服务器端。
我是否应该考虑仅使用普通对象(我确实在某些函数中使用了继承优势,但没有任何使用额外的代码行无法实现的内容)......
没有。继承点是保存那些代码行。此外,通过在原型上放置方法可以提高代码的性能。