一、蓝本
蓝本是切合人类文明大自然观念的乙醛。英文个典故叫作“舒圣祥”,这儿的猫看上去是虎的蓝本,因此,继而他们能窥见,用蓝本来叙述第一类的方式能说是绒兰。
他们在上四节传授面向第一类的这时候提及了:在相同的C词汇中,斯特默也借助各式各样相同的词汇优点来抽象化叙述第一类。
除了一类是如前所述蓝本的C词汇,它借助蓝本来叙述第一类。他们的 JavaScript 是当中代表者。
Function.prototype.__proto__ === Object.prototype //true__proto__大部份第一类都有,prototype多于表达式才有。应用领域微观:
每一表达式都有 prototype 优点,除 Function.prototype.bind(),该优点对准蓝本。
每一第一类都有 __proto__ 优点,对准了建立该第一类的构造表达式的蓝本。蓝本链和蓝本第一类相异,蓝本链很大对准蓝本第一类。蓝本和蓝本链
优点搜寻监督机制: 当搜寻第一类的优点时,假如示例第一类另一方面不存有该优点,则沿著蓝本链往上二级搜寻,找出而则输入,不存有时,则竭尽全力沿著蓝本链往上二级搜寻,直到最世界顶级的蓝本第一类Object.prototype,如却是没找出,则输入undefined;优点修正监督机制: 只会修正示例第一类这类的优点,假如不存有,则展开加进该优点,假如须要修正蓝本的优点时,则能用: b.prototype.x = 2;但是这样会造成大部份继承于该第一类的示例的优点发生改变。//js引擎部分 <script> const l = console.log // 一、 2个世界顶级蓝本第一类 l(Object.prototype) // ->{constructor:f} 普通第一类 l(Function.prototype) // -> ƒ () { [native code] } 表达式第一类 // 二、他们的构造表达式 l(Object.prototype.constructor)// ->ƒ Object() { [native code] } l(Function.prototype.constructor === Function) // -> ƒ Function() { [native code] } // 三、他们的蓝本链关系 l(Object.prototype.__proto__) // ->null l(Function.prototype.__proto__)// ->{constructor:f} Object.prototype // 四、借助Function.prototype,内置了很多高阶表达式第一类(一百多种) l(Array.__proto__ ===Function.prototype) // -> true l(Boolean.__proto__ === Function.prototype) // -> true l(Date.__proto__ ===Function.prototype) // -> true l(eval.__proto__ === Function.prototype) // -> true l(Function.__proto__ ===Function.prototype) // -> true 悖论:自己产生了自己?为了逻辑的完整性 </script> // 以上全是浏览器集成的js引擎提供的监督机制//应用领域层 <script> // 五、应用领域层之表达式:大部份表达式都是 new Function生成的。 const date2 = new Date() l(date2) /* Date.prototype.eat = function () { l(吃了苹果) } const date1 = new Date() date1.eat() l(date1) l(date1.getDate()) l(date1.getFullYear()) l(date1.getMonth()) */ Date.prototype.eat = new Function() const date1 = new Date() date1.eat() // 六、应用领域层之第一类:大部份第一类都是 new Ojbect生成的。 let obj1 = {} // let obj1 = new Object() l(obj1.__proto__ === Object.prototype)//true </script>[[prototype]] 和 __proto__
旧版浏览器有__proto__,新版浏览器没有__proto__。
es6为了保证新旧版浏览器的兼容性,无论是否支持__proto__优点,都纳入了规范。但是不推荐使用。