原型和原型链
1.几乎所有的函数都一个prototype(原型)属性,指向自己所属类的原型
箭头函数没有prototype,不能new; es6快捷函数
2.原型对象上一定有一个属性 constructor,指向自己的构造函数
3.静态的属性和方法,放在构造函数的键值对里面
4.所有的对象身上都有一个属性__proto__(原型链),指向实例所属类的原型
5.Object是所有类的基类
原型链查找机制:
先看自己的私有,有就停止;没有就沿着__proto__向上找,有就停止;没有就继续找,直到找到Object.prototype,没有就是没有
在原型上拓展方法
Array.prototype mypush---作用一样
链式调用
要求:上一步的返回值,必须是同一种类型,才能继续链式操作
想要实现一个需求:
var ary=[5,8,2,1,10] ;
想要让这个数组先排序,然后再倒序,然后再往里面添加一个10,然后再删除第一项;
instanceof
判断某个实例 属不属于 那个类
in
某个属性 是不是 某个对象的属性 (原型链查找机制)
只要沿着 原型链 能找到就是 true--->不论私有还是公有
hasOwnProperty
Object.prototype
检测某个属性 是不是 某个对象 的私有
私有和公有是相对的 不是绝对的
hasPubProperty
使用原型拓展方法 自己在原型上添加方法 hasPubProperty 检测某个属性 是不是 某个对象 的公有
有种特殊情况,某个属性既是公有又是私有
直接去公有区域里查找
Fn.prototype.hasOwnProperty("age") 或者 Object.prototype.hasOwnProperty("age")