【JavaScript】【对象】更好地理解对象继承

继承原理:实例中包含一个指向原型对象的内部指针segmentfault

实现方法:让原型对象等于另外一个类型的实例函数

关键点:this

  1. 构造函数、原型对象、实例prototype

  2. 实例属性、原型方法指针

  3. 构造关系、原型关系code

  4. 自有属性、继承属性和方法对象

demo:继承

//构造器
function Animal() {
    this.animal = 'animal';
};
function Mammal() {
    this.mammal = 'mammal';
};
var cat;

//原型链
Mammal.prototype = new Animal();
cat = new Mammal();

//添加属性和方法
Animal.prototype.isAnimal = true;
Animal.prototype.sayAnimal = function() {
    alert('Is it ' + this.animal + '? ' + this.isAnimal);
};
Mammal.prototype.isMammal = true;
Mammal.prototype.sayMammal = function() {
    alert('Is it a ' + this.mammal + '? ' + this.isMammal);
};

先来看看每一个对象都能访问到哪些属性和方法:原型链

Animal.prototype:作用域

isAnimal    //自定义
sayAnimal()    //自定义

Mammal.prototype:

isMammal    //自定义
sayMammal()    //自定义
animal    //来自构造函数
isAnimal    //来自继承
sayAnimal()    //来自继承

cat:

mammal    //来自构造函数
isMammal    //来自继承
sayMammal()    //来自继承
animal    //来自继承
isAnimal    //来自继承
sayAnimal()    //来自继承

在这个demo中,有两对构造关系和两对继承关系(不考虑Object)。每个经过构造函数实例化的对象(Mammal.prototypecat)都具备构造函数中的属性,实例和构造函数之间是构造关系;构造过程当中也造成了原型关系Mammal.prototypecat的原型,Animal.prototypeMammal.prototype的原型,实例经过原型链找到原型中的属性和方法。

自定义和构造函数的属性是自有属性,它们是对象自己的属性。来自继承的属性和方法是对象沿着原型链找到的,它们并非对象自己的属性和方法

实例继承到的方法的做用域是该实例对象内部的执行环境,能够访问实例能获取到的全部属性。经过this.property的方式能够获得实例对象可以访问到的全部属性和方法,包括自有属性和继承的属性方法。demo中的实例对象cat能够访问到在AnimalMammal及其原型中定义的全部属性方法,这正是继承的意义所在。

验证:

console.log(cat.mammal);    //mammal
console.log(cat.isMammal);    //true
console.log(cat.sayMammal());    //Is it mammal? true
console.log(cat.animal);    //animal
console.log(cat.isAnimal);    //true
console.log(cat.sayAnimal());    //Is it animal? true

转载请注明出处:http://www.javashuo.com/article/p-qaktmvpx-ge.html

文章不按期更新完善,若是能对你有一点点启发,我将不胜荣幸。

相关文章
相关标签/搜索