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
.