Javavscript изменить свойство подкласса при создании - PullRequest
0 голосов
/ 05 марта 2012

если у меня есть

myClass.prototype.subClass=
{
foo:false
}

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

var newObj = new myclass();

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Объекты и массивы - это не то, что следует добавлять к прототипу , если только вы не захотите поделиться ими со всеми экземплярами.

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

this.subClass = {
    foo: true
    // potentially other properties
};

Тем не менее, в некоторых случаях в объекте может быть объект «по умолчанию».Прототип может быть разумным, но вы не должны писать в него.


Назначение объекта в конструкторе вместо этого не дублирует код и позволяет изменять его для каждого экземпляра индивидуально.


Обновление:

Если вы не хотите изменять исходный конструктор, вы можете просто добавить новую функцию в прототип и вызывать ее всякий раз, когда создаете экземпляр объекта:

MyClass.prototype.init = function() {
    this.subClass = {
        //...
    };
};

и

var obj = new MyClass();
obj.init();

Или вы действительно создаете новую функцию конструктора:

function MySubClass() {
    MyClass.apply(this, arguments);
    // now create that object for each instance
    this.subClass = {
        foo: someValue
    };
}

inherits(MySubClass, MyClass);

, где inherits определяется как:

function inherits(Child, Parent) {
    var Tmp_ = function() {};
    Tmp_.prototype = Parent.prototype;
    Child.prototype = new Tmp_();
    Child.prototype.constructor = Child;
}

Тогда вы будете использовать MySubClass вместо MyClass для создания экземпляров.

0 голосов
/ 05 марта 2012

Я думаю, вы не поняли, как работает наследование прототипа, потому что этот вопрос немного странный. Но вы должны иметь возможность доступа к свойству foo, как и к любому другому:

newObj.subClass.foo = newValue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...