Параметр defineProperty дескриптор и дилемма Object.prototype

1

Я использую defineProperty для создания свойств объекта. Параметр descriptor в функции обязательно должен быть object. Вот код:

var config=new Object();
var defineProp = function ( obj, key, value ){
config.value = value; // why should this parameter be an object?
Object.defineProperty( obj, key, config );
};

Почему нам нужно передать объект в параметр Descriptor

У меня ниже двух фрагментов кода, где я создаю конструктор, а затем создаю объекты, используя его. Оба кода возвращают один и тот же вывод в консоли. Использует ли использование .prototype.Methodname что-нибудь?

1

function Car( model, year, miles ) {
this.model = model;
this.year = year;
this.miles = miles;
}

Car.prototype.toString = function () {
return this.model + " has done " + this.miles + " miles";
};
// Usage:
var civic = new Car( "Honda Civic", 2017, 30000 );

console.log( civic.toString() );

2

function Car( model, year, miles ) {
this.model = model;
this.year = year;
this.miles = miles;
this.toString = function () {
return this.model + " has done " + this.miles + " miles";
};
}

var civic = new Car( "Honda Civic", 2017, 30000 );
console.log( civic.toString() );

Использование кода выглядит следующим образом:

var civicSport= Object.create( person );

defineProp(civicSport, "topSpeed", "120mph");//function created above
console.log(civicSport);
Показать ещё 1 комментарий
Теги:
design-patterns
prototype
ecmascript-5
defineproperty

1 ответ

0

Параметр descriptor относится к определенному или модифицированному свойству, поэтому нам нужно передать его как пару ключевых значений (ключ= свойство определено/изменено, значение= изменено или присвоено значение для свойства). Таким образом, descriptor должен быть Object

Для получения дополнительной информации см. Документы MDN

  • 0
    Спасибо за ваш отзыв. Но давайте посмотрим на это var driver=new Object; defineProp(driver, "topSpeed", "100mph"); Здесь ключ ( topSpeed ) и значение ( 100mph ) передаются отдельно, поэтому зачем передавать объект для части «Значение».
  • 0
    Нет, я думаю, вы не правильно поняли. Мы не можем напрямую изменить значение topSpeed. Используя Object.defineProperty, мы не присваиваем / не изменяем значение свойства, а добавляем / модифицируем дескриптор свойства topSpeed. А ключи дескриптора свойства (такие как «value», «set», «get», «writeable») - это те, которые используются для определения значений свойств, поэтому дескриптор является объектом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню