我知道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 /)在他的[書籍](http://www.amazon.com/exec/obidos/ASIN/0596517742/wrrrldwideweb)中反對使用JavaScript中的「class」:它的語法正確,沒有錯誤發生,但是你可能沒有得到你想要的。你實際上可能意指'var d = new DerivedFunc(1,2,3)'。 – Passerby
@Passerby:有一百萬個編程錯誤在語法上是正確的,不會引發錯誤,但不會執行程序員的目標。我不知道爲什麼人們對這個特別的人非常着迷,它並不比其他人差。 –
閱讀[MDN關於面向對象的JavaScript文章](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript),您可能會從中受益。 –