javascript全套知识点:javascript核心知识,六
一、原型
原型是顺应人类自然思维的产物。中文中有个成语叫做“照猫画虎”,这里的猫看起来就是虎的原型,所以,由此我们可以看出,用原型来描述对象的方法可以说是古已有之。
我们在上一节讲解面向对象的时候提到了:在不同的编程语言中,设计者也利用各种不同的语言特性来抽象描述对象。
还有一种就是基于原型的编程语言,它们利用原型来描述对象。我们的 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__属性,都纳入了规范。但是不推荐使用。
- 04-13食之契约怎么吃狗粮?食之契约新资料片这些飨灵有话说
- 04-24林俊杰经典的十首歌,盘点林俊杰10首超好听的歌曲
- 05-06奔驰v260底盘改装:奔驰v260改装这个地板太好看了
- 10-05淮安市万达广场效果图 淮安第四座万达广场落户和投资60亿的铜锣湾广场最新消息来了
- 01-19杏鲍菇凉拌菜的做法窍门,美食分享手撕凉拌杏鲍菇
- 05-10居然之家赣州金湾店 居然之家兴义富康店盛大开业
- 02-15关于青春的唯美插画 分镜插画,我的青春永远留在了那个夏天
- 04-15浪姐4第一次公演姐姐们排名 浪姐4,一公中日姐姐合作次元壁破了
- 02-19记住100条歇后语让你说话幽默满分:生活中常用的10句歇后语
- 12-27肝功能化验单详解:肝功能化验单不会看一分钟教会你
- 04-18寓意爱情长长久久的花:你最爱的花和寓意
- 01-02为什么肛周脓肿不能自愈呢?肛周脓肿一定要治疗吗
- 11-13养花水肥的最佳配制方法 养花加,酸料
- 03-0880后的回忆打工生活 八零后九零后的打工生活
- 04-18现在的家长各种技能都得会:去还是不去难住大部分家长了
- 12-28周也汉服绵绵冰穿搭 周也好伟大的一张脸老土又俗气的
热门
推荐
- 1有关高中历史的高效课堂教学反思136
- 2校园秋季防火安全知识489
- 3最新毕业20周年同学会主持稿范文(精选3篇)259
- 4标准版离婚协议书汇编7篇182
- 5学雷锋纪念日手抄报资料396
- 6电脑动不动死机怎么办286
- 7小米商城怎么查看预约277
- 8住房按揭贷款合同书模板一449