Я знаю немного C#, и теперь я начал работать с JavaScript
, и у меня возникли проблемы с пониманием основ.Необходимое фундаментальное разъяснение Javascript
Вот мой пример кода:
function BaseFunc(x, y) {
this.X = x;
this.Y = y;
}
function DerivedFunc(x, y, z) {
this.Z = z;
BaseFunc.call(this, x, y);
}
DerivedFunc.prototype = new BaseFunc;
function Test() {
var d = DerivedFunc(1, 2, 3);
var b = new BaseFunc(4, 5);
d.sayHello();
b.sayHello();
}
DerivedFunc.prototype.sayHello = function() {
alert("Result is: " + (this.X + this.Y + this.Z));
}
В приведенном выше коде я пытаюсь сделать наследование.
Все выглядит хорошо, пока я не достиг линии BaseFunc.call(this, x, y);
Эта линия должна вызывать базовую функцию, но в этом контексте используется this
. Это только для удовлетворения подписи метода call
, как это работает?
Второй вопрос: в javascript мы можем добавить что-нибудь динамически, В моем случае я добавляю свойство sayHello()
и назначаю его анонимной функцией. как DerivedFunc.prototype.sayHello
, я добавляю свойство/метод к BaseFunc
или DerivedFunc
, так как он добавлен к прототипу, он должен быть добавлен в BaseFunc
, насколько я понимаю. Но когда я выполняю вышеуказанный код, я получаю ошибку, которая не определена. sayHello
.
Может кто-то прояснить меня о том, что происходит не так, спасибо?
'вар D = DerivedFunc (1, 2, 3);' Это одна из причин [Дуглас Крокфорд] (HTTP: // Javascript .crockford.com /) против использования «класса» в JavaScript в его [книге] (http://www.amazon.com/exec/obidos/ASIN/0596517742/wrrrldwideweb): это синтаксис правильный, ошибка не возникла, но вы не можете получить то, что хотите. Вы можете на самом деле означать «var d = новый DerivedFunc (1, 2, 3)». – Passerby
@Passerby: Есть миллион ошибок программирования, которые синтаксически правильны и не вызывают ошибок, но которые не делают то, что планировал программист. Я не знаю, почему люди так одержимы этим, это не хуже других. –
Возможно, вам будет полезно прочитать статью [MDN об объектно-ориентированном JavaScript] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript). –