蓝本
甚么是蓝本:
蓝本是示例第一类(缺省new 两个表达式出的第一类)头上所独有的一类特性,是javascript同时实现承继的其大前提
已经开始:
一、正式宣布如是说蓝本前须要先如是说缺省和示例第一类的基本概念,甚么是外部结构表达式,甚么又是示例第一类
function Person() {} //该处Person是两个缺省,须要有newURL //透过new造成的表达式p就归属于Person的示例第一类 var p = newPerson();二、如是说了示例第一类和缺省的基本基本概念,他们上看呵呵是示例和缺省间的外部特性亲密关系
prototype特性:要晓得js中prototype特性仅存有表达式头上 ,因此叫作叫作表明蓝本特性function Person() {} var p = new Person(); //预设输入的是两个Object空的示例第一类,这是Person的蓝本第一类 console.log(Person.prototype);2.上面上看呵呵透过Person 所外部结构的示例第一类头上有甚么特性
function Person() {} var p = new Person(); //预设输入的是两个Object空的示例第一类 console.log(Person.prototype);//在javascript中 示例第一类会预设加进两个特性叫__proto__,叫作示例第一类的显式蓝本特性 //列印会辨认出Person.prototype和p.__proto__特性傻哥那样 console.log(p.__proto__);3.一模那样是不是这两个特性是那样的,上看呵呵
console.log(p.__proto__ == Person.prototype);//true //这也就引出,javascript中示例第一类的显式蓝本特性等于缺省的表明蓝本特性,记住这句话有用就完了4.constructor特性, constructor特性存有于蓝本第一类中,他指向了缺省
function Person() {}; var p = new Person(); //所以Person.prototype.constructor == Person console.log(Person.prototype.constructor == Person)//true5.根据须要,可以将Person.prototype特性指向新的第一类,作为Person的蓝本第一类,因此新第一类的constructor不在指向Person缺省
function Person() { }; var p = new Person(); //直接给Person的蓝本指定第一类字面量。则这个第一类的constructor特性不再指向Person表达式 Person.prototype = { name: alexbai, age: 20 } console.log(Person.prototype); //Object第一类 //如果你须要constructor,你须要这样做 Person.prototype = { constructor: Person //让constructor重新指向Person表达式 }三、有了上面的知识储备,上看呵呵平时所说的蓝本链到底是甚么
先看一段代码:
1.
function Person(){}; //为Person的蓝本第一类上加进两个方法,叫speak,所以此时Person的蓝本第一类上就多了两个speak方法 Person.prototype.speak = function (){ console.log(speak); } var p = new Person(); //可以透过Person的示例第一类进行调用,该处是使用了蓝本链的基本概念,也是用到__proto__ p.speak() //此时调用toString()方法,但是透过列印,示例第一类上并没有toString ==》没有就透过蓝本链__proto__继续向上查找,最后在Object的示例第一类上找到 console.log(p.toString());2.这里须要须要,所谓的蓝本链,其实正是利用了–proto– 特性一级一级查找,直到尽头,这是所说的蓝本链
结尾 :
蓝本和蓝本链是javascript的很重要一部分,也是在编程中所须要的,以前我也是乱乱的,似懂非懂状态,想要学好这块知识,建议可以独立用自己的语言将所这块知识点描述清楚
作者:privatebai
链接:
https://juejin.cn/post/6920013511229718536