浅谈js继承之原型链继承

继承之原型链

本文是简单来谈一下自己对原型链的理解,并且写个例子来巩固一下。

概念

继承是OO语言中一个重要的特性和概念。许多的OO语言中都支持两种继承方式:接口继承和实现继承。

ECMAScript只支持实现继承,其实现继承主要是靠原型链来实现。

那么首先就先来讲讲原型链。

原型链的基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。

简单回顾下构造函数、原型和实例的关系:

每个构造函数或则函数都要一个prototype(显式原型),一般方法都会写在显式原型上,比如Object的toString()方法就是写在Object.prototype上的,所以每一个实例化对象都可以根据原型链的原理,调用到该方法。而实例化的对象都有一个(_proto_)属性,指向其构造函数的显式原型,这样也就构成了原型链了。

原型链继承例子

function Elem(id){
    this.elem = document.getElementById(id);
};

Elem.prototype.html = function(val){
    var elem = this.elem;
    if(val) {
        elem.innerHtml = val;
        return this;//jQuery链式写法的原理
        } else {
            return  elem.innerHtml;
        }
};

function SubElem(id){
    this.subElem = document.getElementById(id);
};

SubElem.prototype = new Elem(id);
//之后实例化SubElem,随之可调用父类的方法。

缺点是:当在父类显式原型上加上属性,修改属性后,所有实例化对象的该属性都会受到影响。所以一般情况下是不用的,不过可以了解一下原型链的机制原理以及this的原理。
这里附带说一下this的原理:
- 创建一个新对象为空
- this 指向这个对象
- 执行代码,即为this赋值
- 最后返回this (不过一般不写return this, 因为会自动加上,但是自己写的话需要保证写对,否则就会返回一个不是自己想要的对象)

猜你喜欢

转载自blog.csdn.net/junjunaijiji/article/details/74636723