JavaScript: изменить прототип переменной объекта? - PullRequest
2 голосов
/ 13 сентября 2011

Вот объект:

var obj = new function(){
    this.prop = {};
}

и я пытаюсь сделать что-то вроде:obj.prop.prototype["new_attr"] = "some_value";

Что я хотел бы сделать, так это навсегда изменить obj.prop, чтобы он содержал новые атрибуты.Из того, что я понял, у всех «Объектов» был прототип, но JavaScript говорит мне, prop не имеет прототипа.

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

Ответы [ 3 ]

6 голосов
/ 13 сентября 2011

Обычно вы получаете доступ к объекту prototype из функции конструктора, но вы также можете получить его из объекта, но не используя .prototype.

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

Официальный способ ECMAScript 5 (также не поддерживается во всех браузерах) для получения объекта-прототипа объекта заключается в использовании Object.getPrototypeOf().

В вашем случае .prop ссылается на литерал объекта, так что вы уже знаете, что прототип - Object.prototype.

Object.getPrototypeOf( {} ) === Object.prototype;  // true

Обратите внимание, что почти всегда плохая идеяextend Object.prototype.


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

Если вы просто пытаетесь изменить объект, на который ссылается .prop, просто выполните:

obj.prop.new_attr = "some_value";
1 голос
/ 13 сентября 2011

Вы можете выполнить то, что пытаетесь сделать, но вам нужно добавить объект prop в прототип конструктора:

var Obj = function() {};

Obj.prototype.prop = { bar: 'bar value' };

var obj_1 = new Obj();

console.log(obj_1.prop.bar); //bar value

obj_1.prop.foo = 'foo value';

var obj_2 = new Obj();

console.log(obj_2.prop.foo); //foo value
0 голосов
/ 13 сентября 2011

Потому что атрибут prop пуст. Прежде чем вы сможете изменить object.prop, вам нужно инициализировать prop сначала значением по умолчанию.

См. Следующие ссылки: Расширение объектов и классов JavaScript
Введение в объектно-ориентированный JavaScript
Повторное введение в JavaScript

НТН. Приветствия.

...