引用类型自由扩展

var obj = {}; obj.a = 101;

var arr = []; arr.a = 102;

// *因为我这里已经var了 obj = {}

// 所以当我在进行obj.a = 101的时候实际上是对属性的赋值操作

// 如果在当前作用域链中找到obj则会对他的属性赋值

// 没找到他才会在全局对象即window对象中创造一个obj属性并赋值

// 它并不是声明了一个全局变量,而是创建了一个全局对象的属性

function fn(){}

fn.a = 100;

//浏览器帮助做的__proto__普通对象

// console.log(arr.__proto__)//自由扩展属性

// console.log(fn.__proto__)

//funciton本身带的prototype普通对象

//console.log(fn.prototype)

//所有引用类型__proto__属性值指向他的构造函数的prototype属性值

console.log(fn.__poroto__ === Function.portotype)

console.log(obj.__poroto__ === Object.portotype)

console.log(arr.__poroto__ === Array.portotype)

其实本质上来说这些操作都是ECMA5 JS的语法糖需要记住

// function Foo(){} -》 var Foo = new Function()

//var arr=[] -》 new Array

//var obj={} -》 new Object

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容