var F = function () {
};
var G = function(){
this.name = 'xiaoming'
};
G.prototype.each=function(){
console.log("吃货")
};
Object.prototype.a=function () {//(2)所有的对象函数的__proto__都会有a函数对象
console.log("a()")
};
Function.prototype.b = function () {
console.log("b()")
};
//Function 指的是继承在所有的window上面的声明的函数
var f = new F();
var g = new G();
console.log(a instanceof Function);//(1)
//(1) Object是所有的对象的根,在根上面添加了一个对象a,其实就是添加到__proto__上面,Function默认是在object手动添加的对象a;以后添加的对象是a的子集可以这么理解 b就是子集
console.log(Function instanceof Object);//true
console.log(Object instanceof Function);//true
console.log(F instanceof Object);//true
console.log(F instanceof Function);//true
console.log(f instanceof Function);//false
console.log(f instanceof Object);//true
console.log(F.prototype.__proto__);//原型的规则就是现在他自己的本身去查找然后早__proto__上面去找一层一层的去查看找
console.log(f instanceof F.prototype.constructor);//实力化的对象是构造函数的constructor的属性
f.a.__proto__.b();//打印出 b() 结合(1)理解 所以在a对象的原型下面就可以找到b();如果直接f.b();就会找不到
// f.b();//报错 Uncaught TypeError: f.b is not a function 因为b对象是a对象的子集所以直接调用就会没有
g.a.__proto__.b();//打印出 b() 结合(1)和(2)理解 也可以拿到b函数对象
//f对象和g对象是构造函数的实例 构造函数上面添加了原型的方法在查找方法的时候就会在__proto__上面去查看所以g和f就能获取到b()函数对象,产生层级的原因看(1)
console.log(f);
console.log(g);//通过构造函数this添加就不会在__proto__,直接在实例化对象上面
console.log(Object.prototype);//手动给Object对象添加的所有属性
//不足之处提出大家共同进步!谢谢