簡體   English   中英

Backbone.js實例與類變量

[英]Backbone.js instance vs class variables

我對實例和類變量有些困惑。 我擺弄一個小東西來顯示似乎與我不一致的東西。

https://jsfiddle.net/njcfm4n8/1/

我熟悉將數組聲明為子類屬性的問題,應該在initialize函數中完成它,否則該數組將在所有實例之間共享。 小提琴證明了這一點。 但是,為什么number屬性也不能共享?

根據muistooshort和maris的評論,數組恰好像類屬性一樣工作,因為它是引用類型。 該數組實際上是在模型實例之間共享的,但這更多是JavaScript的怪癖,而不是用Backbone創建類變量的預期方式。

另一方面,整數是原始類型,以及布爾值和字符串,而javascript不會傳遞對這些類型的引用,而是將其復制。

數組,對象和函數是引用類型,而整數,布爾值,null和undefined是值類型。 您可以在此處了解更多信息: http : //docstore.mik.ua/orelly/webprog/jscript/ch04_04.htm

如果要使用類屬性,那么Backbone文檔的這一部分是相關的: http : //backbonejs.org/#Model-extend

extendBackbone.Model.extend(properties,[classProperties])

要創建自己的Model類,您可以擴展Backbone.Model並提供實例屬性以及可選的classProperties,這些屬性將直接附加到構造函數。

我使用以下代碼在這里https://jsfiddle.net/zn6bu4uf/3/分叉了您的jsfiddle:

var myModel = Backbone.Model.extend({}, {foo: 0})

console.log(myModel.foo); // 0
myModel.foo++;
console.log(myModel.foo); // 1

var test1 = new myModel();
var test2 = new myModel();

test1.constructor.foo++;
test1.constructor.foo++;

test2.constructor.foo++;

console.log(test1.constructor.foo) // 4
console.log(test2.constructor.foo) // 4

骨干網將您的屬性( narr )添加到myModel原型中。

因此,所有myModel對象的__proto__都具有narr並可以訪問它們。

數組在對象之間共享,因為沒有分配放置數組的位置。 推變異數組本身。

但是增加實際上創建新值,然后將其分配給對象。

從規范: test1.n++實際上將執行此操作

  1. 從對象test1獲取屬性n (如果不在其中,則在test1.__proto__ ...中進行搜索)並將其保存為虛擬變量old_val
  2. 將虛擬變量new_val設置為old_val + 1
  3. 將對象“ test1”中的屬性n值設置為new_val
  4. 返回old_val

通過規范步驟3,不檢查屬性n初始位置。 它將向test1添加新屬性。

規范

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM