溫故而知新 xd使用new 操作符呼叫建構函式,會經歷以下四個步驟:
1.1. 建立乙個新物件;
1.2. 將建構函式的作用域賦給新物件(因此 this 就指向了這個新物件);
1.3. 執行建構函式中的**(為這個新物件新增屬性);
1.4. 返回新物件。
當呼叫建構函式建立乙個新例項後,該例項的內部將包含乙個指標(內部屬性:__proto__
),指向建構函式的原型物件(所以可以在建構函式的 prototype 裡存放例項公用的方法)。
給出父類 animal,實現子類cat:
function animal (name)
animal.prototype.eat = function (thing)
function cat (name)
cat.prototype = new animal() // 原型鏈,繼承父類方法
/* 在prototype繼承了父類例項的全部屬性,存在冗餘。屬性的繼承已經在建構函式內通過呼叫父類建構函式實現。
實際上,子類的prototype需要的只是父類例項中指向父類原型的內部指標: cat.prototype.__proto__ = animal.protype */
console.log(cat.prototype)
//
cat.prototype.constructor = cat // 由於上面 cat.prototype 進行了賦值,所以需要重新指定其建構函式。
// 這一步對 instanceof 無影響,因為 "instanceof 運算子用來測試乙個物件在其原型鏈中是否存在乙個建構函式的 prototype 屬性" ;影響的是cat例項的constructor 屬性。
// 如果不做這一步:var tom = new cat('tom'); tom.constructor ==> animal
function cat (name)
function createobject (obj)
f.prototype = obj
return new f()
}cat.prototype = createobject (animal.prototype)
// 相當於 cat.prototype = object.create(animal.prototype)
console.log(cat.prototype)
//
cat.prototype.constructor = cat
class animal
eat(thing)
}class cat extends animal
}
js中物件的繼承
js中物件的繼承 1.物件冒充 js中沒有訪問修飾符的概念 可以實現多繼承 但會出現干擾,如果父類a和父類b中都定義了同名的屬性或方法,後面的繼承就會把前面的給替換掉了 不推薦 function parent username function child username,password var...
js中物件繼承
一,js中物件繼承 js中有三種繼承方式 1.js原型 prototype 實現繼承 複製 如下 2.建構函式實現繼承 複製 如下 複製 如下 js手冊中對call的解釋 複製 如下 call 方法 呼叫乙個物件的乙個方法,以另乙個物件替換當前物件。call thisobj arg1 arg2 ar...
js中物件導向的繼承
參考 繼承 缺點 修改子類dog.prototype的同時也影響到了父類的animal.prototype 物件導向的拷貝繼承 上面 只是用了淺拷貝實現了物件的繼承,jquery中就是利用了拷貝繼承。function extend c,p if typeof p object else if win...