js原型与原型链总结
【js原型与原型链总结】原型是什么,用翻译翻译过来就是prototype。讲原型的时候我们可以先补充几点其他知识点,这样可以方便我们理解prototype。
补充一:我们得先知道,引用类型(数组,对象,函数),他们都是具有对象的可拓展属性(可以百度理解)。比如,foo是个对象,foo.a=1,可以扩展一个a属性。
补充二:我们得先说说构造函数。其实所有引用类型都有构造函数。
var a = {};
它还有这样的写法,var a = new Object();
Object是a的构造函数
var b = [] ;
它还有这样的写法, var b =new Array();
Array是b的构造函数
function Foo(){},它还有这样的写法var Foo = new Funcrion(){},Foo的构造函数是Function
我们可以使用instanceof来判断一个函数是否是一个变量的构造函数。是的话返回true,否则返回false。
第三:所有的引用类型(函数,数组,对象)是都是对象。那么是对象,就具有对象的可拓展特性。对象本身就带有一个属性,叫做__proto__属性,他也叫做隐式原型。
当我们想要得到某个对象的属性值时,如果这个对象没有这个属性,那么我们就需要去这个对象的隐式原型_proto_上面去找。如果还找不到的话,我们就需要去构造函数的隐式原型去找,如果还找不到,那么就会在这里停止寻找了。
例如:
var Foo = new Function(){},
var fn = new Foo()
fn.toString();
fn想用toString()属性,他首先会在fn.proto 去寻找 (fn.proto === Foo.prototype),如果还没找到,他就会到fn.proto.__proto__里卖去找,fn.proto.__proto__也等于Object.prototype里面去寻找,结果找到了。
推荐阅读
- Django模板的继承与模板的导入
- 微软|开源布道,一场艰难的修行 —— 适兕与开源之道
- 区块链NFT商城
- 稳定性与高可用保障的工作思路
- 3G与4G到底有何区别()
- excite与matlab联合仿真|excite与matlab联合仿真,只有你想不到,没有EXCITE做不到的瞬态工况模拟
- Cesium|Cesium 1.91 更新日志 - MSAA 与原生 Promise 来了
- 【干货】TypeScript|【干货】TypeScript 实战之 extends、infer 与 dva type
- Gerrit的用法及与gitlab的区别
- 算法|我工作第五年的学习与读书之法