2013-08-18 2 views
0

Учитывая, что я использую класс Джона Ресига (найдено здесь: Class), есть ли способ для объекта javascript передать прокси переменные другому объекту?Есть ли способ прокси-переменных внутри объекта javascript?

Пример:

var Car = Class.extend({ 

    init: function(mileage, color, type) { 
     this.mileage = mileage; 
     this.color = color; 
     this.type = carDatabase[type]; 
    } 
)); 

// This would be loaded in as a datasource, not sitting in global 
// space like this. 
var carDatabase = { 
    "Falcon": { 
     "year": 2013, 
     "engine": "Inline 8", 
     "company": "Ford" 
    }, 
    "Commodore": { 
     "year": 2012, 
     "engine": "V8", 
     "company": "Holden" 
    }, 
    // etc etc 
}; 

// Using the Car class somewhere: 
var myCar = new Car(10000, "blue", "Falcon"); 
console.log(myCar.color); // blue 
console.log(myCar.type.year); // 2013 
console.log(myCar.type.company); // Ford 

Поэтому, учитывая, в приведенном выше примере, можно ли переслать прокси type в сам класс автомобиля без дублирования содержимого type.

В идеале я бы предпочел ввести myCar.company, а не myCar.type.company для согласованности Класса.

Я знаю, что подчеркивание и jQuery предлагают расширенные методы, но они, похоже, дублируют содержимое в исходный объект. Я также рассмотрел образец веса мухи (о котором я бы сказал, это слишком много, и я бы пришел к тому же самому, что и выше).

+0

Ответ @ dc5 правильный, но он, вероятно, будет работать хуже, чем копирование данных, и меньше поддержки браузера. – FakeRainBrigand

+0

Почему бы просто не использовать буфер? 'var car = myCar.type;' затем использовать car.year ... – technosaurus

+0

@technosaurus Потому что автомобиль пропустит такие вещи, как цвет/пробег, которые являются особыми для одного экземпляра. Другие элементы разделены (например, двигатель и компания), но элементы/свойства, такие как пробег, относятся только к определенному автомобилю – Chris

ответ

2

Вы можете использовать defineProperty, который имеет поддержку определения методов get/set для имущества между прочим.

В статье, указанной в MDN, также имеется таблица совместимости, но в целом она поддерживается в последних версиях всех браузеров с некоторыми ограничениями.

Поскольку вы упомянули Джона Ресига, у него есть хорошее сообщение в блоге «ECMAScript 5 Objects and Properties», которое немного старше, но все еще хорошее чтение. Он был написан в мае 2009 года, и он рано заявляет, что некоторые примеры и спецификации могут измениться.