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