如果用原型方式重定義前面例子中的類,它們將變為下列形式:
復制代碼 代碼如下:
function ClassA() {
}
ClassA.prototype.color = "blue";
ClassA.prototype.sayColor = function () {
alert(this.color);
};
function ClassB() {
}
ClassB.prototype = new ClassA();
注意:調用 ClassA 的構造函數,沒有給它傳遞參數。這在原型鏈中是標準做法。要確保構造函數沒有任何參數。
與對象冒充相似,子類的所有屬性和方法都必須出現在 prototype 屬性被賦值后,因為在它之前賦值的所有方法都會被刪除。為什么?因為 prototype 屬性被替換成了新對象,添加了新方法的原始對象將被銷毀。所以,為 ClassB 類添加 name 屬性和 sayName() 方法的代碼如下:
復制代碼 代碼如下:
function ClassB() {
}
ClassB.prototype = new ClassA();
ClassB.prototype.name = "";
ClassB.prototype.sayName = function () {
alert(this.name);
};
復制代碼 代碼如下:
var objA = new ClassA();
var objB = new ClassB();
objA.color = "blue";
objB.color = "red";
objB.name = "John";
objA.sayColor();
objB.sayColor();
objB.sayName();
復制代碼 代碼如下:
var objB = new ClassB();
alert(objB instanceof ClassA); //輸出 "true"
alert(objB instanceof ClassB); //輸出 "true"
復制代碼 代碼如下:
console.log(objB.__proto__===objB.constructor.prototype) //false
新聞熱點
疑難解答
圖片精選