美文网首页
js原型链全解

js原型链全解

作者: 幽幽_默默 | 来源:发表于2020-03-14 22:37 被阅读0次

    每一个JavaScript对象(除了 null )都具有的一个属性,叫proto,这个属性会指向该对象的原型.

    即对于每一个new出来的函数,我们看看都执行了些什么

    1.var obj = {};

    2.obj.__proto__ = Base.prototype;

    3.Base.call(obj);

    第一行,我们创建了一个空对象obj

    第二行,我们将这个空对象的__proto__成员指向了Base函数对象prototype成员对象

    第三行,我们将Base函数对象的this指针替换成obj,然后再调用Base函数,于是我们就给obj对象赋值了一个id成员变量,这个成员变量的值是”base”,关于call函数的用法。

    下面举个例子。

    原型对象的理解

    person1实例对象的原型指向了Keith.prototype。即Keith.prototype就是一个原型对象

    Keith的原型指向了Function.prototype。

    Function.prototype的原型指向了Object.prototype。

    Object.prototype的原型指向了Null。

    理解了这个,我们再来看下面的这张图

    函数的原型链图解

    prototype存在的目的,由于每个对象实例中的属性和方法都在各自的实例中,其中方法是刻意共用的,为了使不同对象实例之间的方法刻意共用,于是便诞生了prototype。比如

    var arr1 = [1, 0, 0, 8, 6];

    var arr2 = [1, 0, 0, 8, 6, 1, 1];

    arr1.sort(function(n1, n2) {

    return n1 - n2;

    });

    arr2.sort(function(n1, n2) {

    return n1 - n2;

    });

    console.log(arr1); //[0, 0, 1, 6, 8]

    console.log(arr2); //[0, 0, 1, 1, 1, 6, 8]

    console.log(arr1 === arr2);//false

    console.log(arr1.sort === arr2.sort);//true

    最后一行,证明了数组的方法是共用的。

    相关文章

      网友评论

          本文标题:js原型链全解

          本文链接:https://www.haomeiwen.com/subject/xvqvshtx.html