Поведение метода наследования объекта функции javascript - PullRequest
0 голосов
/ 30 декабря 2010

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

var Car = function() {
    this.foo = 'shiny';
}

var Rover = function() {
    this.inherit = Car;
    this.inherit();
}

var Mini = function() {
    this.inherit = Car;
    this.inherit();
}

, когда создается новый экземпляр подкласса. Метод this.inherit вызывает сам родительский класс, так чтоСвойства и методы parent доступны для подкласса.

var myRover = new Rover();

var myMini = new Mini();
myMini.foo = 'rusty';

console.log(myRover.foo, myMini.foo); // displays "shiny" & "rusty" respectively

Я смотрел в Mozilla и MSDN, но не могу найти его где-нибудь задокументированным.Может ли кто-нибудь назвать это поведение и любую дополнительную документацию.

Ответы [ 2 ]

1 голос
/ 30 декабря 2010

Я думаю, что слово inheritFrom здесь не имеет никакого смысла. Это может быть также bar. То, что делает эту работу, является шаблоном, который вы определяете членом функции «subClass», которую вы вызываете на следующей строке.

Возможно, стоит почитать статью Дугласа Крокфорда " Классическое наследование в JavaScript " для некоторых дополнительных идей.

0 голосов
/ 30 декабря 2010

inheritFrom не является методом, который существует в основных объектах JavaScript. Наследование JavaScript может быть достигнуто многими способами , как описано в этом посте . То, что вы делаете здесь, на самом деле не является надлежащим наследованием, поскольку вы просто устанавливаете один метод в отдельный объект, равный функции.

Сначала вы объявляете функцию с именем superClass. Эта функция устанавливает свойства foo и bar объекта this. Когда вы устанавливаете метод на subClass, равный superClass, объект this затем ссылается на функцию subClass, потому что он является вызывающим методом, поэтому для подкласса свойства foo и bar устанавливаются на * 1016. * и 'bar'.

Однако, когда вы переписываете метод foo здесь:

this.foo = function() {
    return this.foo;
};

Вы превращаете foo в функцию.

Обратите внимание, что при добавлении этого сценария:

var test = new subClass();
alert(test.foo);

test.foo будет функцией, если вы переопределите ее значение в конструкторе subClass. Добавление этого:

alert(test.bar);

Оповещает строку 'bar', поскольку вы ее не перезаписали. Также, если вы вызовете test.foo(), он просто вернет указатель на метод test.foo.

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