个人备忘而已。。。。
值类型的类型判断用typeof,引用类型的类型判断用instanceof。
一切(引用类型)都是对象,对象是属性的集合。
对象都是通过函数创建的。
instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
Instanceof运算符的第一个变量是一个对象,暂时称为A;第二个变量一般是一个函数,暂时称为B。
Instanceof的判断队则是:沿着A的__proto__这条线来找,同时沿着B的prototype这条线来找,如果两条线能找到同一个引用,即同一个对象,那么就返回true。如果找到终点还未重合,则返回false。
var fn = function () { };
console.log(fn instanceof Object); // true
每个函数都有一个属性叫做prototype。
这个prototype的属性值是一个对象(属性的集合),默认的只有一个叫做constructor的属性,指向这个函数本身.
function Fn() { }
Fn.prototype.name = '王福朋';
Fn.prototype.getYear = function () {
return 1988;
};
var fn = new Fn();
console.log(fn.name);
console.log(fn.getYear());
Fn是一个函数,fn对象是从Fn函数new出来的,这样fn对象就可以调用Fn.prototype中的属性。
因为每个对象都有一个隐藏的属性——“__proto__”,这个属性引用了创建这个对象的函数的prototype。即:fn.__proto__ === Fn.prototype
这里的"__proto__"成为“隐式原型”。
Object.prototype确实一个特例——它的__proto__指向的是null
对象的__proto__指向的是创建它的函数的prototype,就会出现:Object.__proto__ === Function.prototype
Function也是一个函数,函数是一种对象,也有__proto__属性。既然是函数,那么它一定是被Function创建。所以——Function是被自身创建的。所以它的__proto__指向了自身的Prototype
未完。。。。先去深入研究上图