js原型与闭包 读书笔记

来源:互联网 发布:无影无踪软件 编辑:程序博客网 时间:2024/06/06 00:44

个人备忘而已。。。。

值类型的类型判断用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

函数也是被创建出来的。谁创建了函数呢?——Function

对象的__proto__指向的是创建它的函数的prototype,就会出现:Object.__proto__ === Function.prototype

Function也是一个函数,函数是一种对象,也有__proto__属性。既然是函数,那么它一定是被Function创建。所以——Function是被自身创建的。所以它的__proto__指向了自身的Prototype


未完。。。。先去深入研究上图

0 0
原创粉丝点击