// es5實現(xiàn)繼承
/*
介紹: 所有 Animal 都要吃東西,Animal類有一個公用的eat方法 和 name屬性
Rabbit 類繼承自 Animal,它有公用的 jump 方法手销。
*/
function Animal(name) {
this.name = name;
}
Animal.prototype.eat = function() {
console.log('I love eat dinner!');
}
const a = new Animal('aaa');
// console.dir(a);
function Rabbit(name) {
Animal.call(this, name); // oops!
}
const f = function () { }
f.prototype = Animal.prototype;
Rabbit.prototype = new f(); // oops!
Rabbit.prototype.jump = function() { // 注意要寫在上面oops的下面
console.log('I can jump high!');
}
const r = new Rabbit('rabbit');
console.dir(r)
// es6實現(xiàn)繼承
class Animal { // 注意不是 Animal()
constructor(name) { // constructor必須要
this.name = name;
}
eat() {
console.log('eat');
}
}
class Rabbit extends Animal { // 注意不是 Rabbit()
constructor(name) {
super(name); // super必須要
}
jump () {
console.log(jump);
}
}
const r = new Rabbit('xiaobai');
console.log(r);
輸入如下:
總結(jié):
- 所有的對象都有 proto 屬性
內(nèi)存中的所有對象在內(nèi)存中以??的數(shù)據(jù)結(jié)構(gòu)存儲(右上角藍色部分)拒贱,
1,2佛嬉,3指的是'Leon', 'Jack', 'Tom', 上層是Man男人逻澳,Woman女人,再上層是人類暖呕,Human赡盘,最頂層是Object,共有屬性缰揪。
// es6寫法
class Human {
constructor(name, age){
this.name = name;
this.age = age;
}
run() {
console.log('I like running!');
}
}
class Man extends Human {
constructor(name, age, like){
super(name, age);
this.like = like;
}
fight() {
console.log('All man like fight');
}
}
const man = new Man('leon', 18, 'play games');
console.dir(man);
man.run();
man.fight();
var o = {}
console.log(o._proto_ === Object.prototype); // 為 true
var fn = function(){}
console.log(fn._proto_ === Function.prototype); // 為 true
console.log(fn._proto_._proto_ === Object.prototype); // 為 true
var array = []
console.log(array._proto_ === Array.prototype); // 為 true
console.log(array._proto_._proto_ === Object.prototype); // 為 true
console.log(Function._proto_ === Function.prototype); // 為 true oops!
console.log(Array._proto_ === Function.prototype); // 為 true oops!
console.log(Object._proto_ === Function.prototype); // 為 true oops!
true._proto_ === Boolean.prototype; // 為 true
console.log(Function.prototype._proto_ === Object.prototype); // 為 true