2016-08-31 2 views
1

Я создал модуль, который я использую для записи глобального массива следующим образом:Javascript - получить значение объекта недвижимости НЕ ссылки

class SomeLibrary { 

    constructor(product) { 
    if (typeof window.globalArray === 'undefined'){ 
     window.globalArray = []; 
    } 
    this._someVal = 0; 
    } 
    . 
    . 
    . 
    addToGlobalArray(obj) { 
    obj.someVal = this._someVal; 
    window.globalArray.push(obj); 
    this._someVal++ 
    } 
    . 
    . 
    . 
    . 
} 

let someLib = new SomeLibrary(); 
someLib.addToGlobalArray({test: 'hello'}) 
someLib.addToGlobalArray({test: 'hello again'}); 

И хочу, чтобы мой «globalArray на„someVal“, чтобы использовать текущее значение из _someVal из модуля не ссылка результата выглядеть следующим образом:

//I want this outcome  
[ 
    {test: 'hello', someVal: 0}, 
    {test: 'hello again', someVal: 1} 
] 

не (как это в настоящее время работает)

//I don't want this outcome  
[ 
    {test: 'hello', someVal: 1}, //someVal here is 1 as it is a reference to the current value of _someVal in the module 
    {test: 'hello again', someVal: 1} 
] 

Что мне нужно сделать, чтобы передать значение, а не ссылочный в глобальный объект?

(я не имею доступа к JQuery или подчерк)

ответ

1

Ваш код уже работает так, как вы говорите, вы хотите.

По определению свойство, добавляемое к объекту, добавляемому в глобальный массив, добавляется значением (его значение в этот точный момент времени), а не по ссылке; Действительно, в JS нет способа сделать это иначе, чем через такие вещи, как «геттеры» или «прокси».

Я подозреваю, что вы на самом деле работаете что-то вроде следующего кода:

var object = {test: "hello"}; 
someLib.addToGlobalArray(object}) 

object.test = "hello again"; 
someLib.addToGlobalArray(object); 

Это привело бы к одному объекту {test: "hello again", someVal: 1} занимающего как первое и второе места в глобальном массиве. Тот факт, что someVal имеет то же значение 1 как в globalArray[0], так и в globalArray[1], не имеет никакого отношения к тому, что оно установлено по ссылке; это только потому, что это тот же объект в обоих слотах.

+0

... за исключением '{get someVal() {return self._someVal; }} ' – Bergi

+0

@Bergi Спасибо, исправил ответ, чтобы отразить это. –

Смежные вопросы