中午时候我去药店称了下体重,好家伙!我减肥成功了,足足比上个月瘦了10斤!因而想减肥就去郑州吧。。。面试
而后回来迷迷糊糊睡了一会,竟然想起了周三的面试,有点小遗憾有点小触动。闭包
此次回成都后,尚未正式找工做,我也在审视本身,想起了上次二面时候面试官问的一个问题:函数
你有神马值得自豪的事情吗?你有什么能证实本身性格特色的事情吗?学习
这个其实想让我自我吹嘘一番嘛,可是我出来工做后是有几件出彩的事情,可是感受在他面前就说不来也不算事了,因而弱弱的说了一下本身坚持写了3个月的博客了。ui
可是在他看来,3个月彷佛不算事。。。其实想想3个月确实不算什么,转瞬即逝。我还有不少不懂的东西,各个方面。this
因此下周我仍是应该找一个工做安定下来,认认真真作一两个产品,而后坚持把今年的博客写完先!但愿下次被人问到这个问题时候我能够自豪的说,我天天都坚持学习了2,3个小时,而且分享出来了博客,而且以此为乐。spa
PS:其实我在睡觉时候,主要想到的是,怎么个人机票还没给我报销。。。帐上没钱啊。。。:)prototype
好了,废话结束,进入咱们下午的学习吧,咱们此次又来看看咱们的prototype吧,面向对象我又来了,由于这个东西前面咱们就写过代码,这里直接上重点。指针
咱们建立的每个函数都包含一个prototype(原型)属性。
他是一个指针,指向一个对象,这个对象是包含能够由特定类型的全部实例共享的属性和方法。
通俗点:prototype就是一模板,新建立的模板就是对他的一个拷贝
每一个prototype对象又会包含一个constructor属性,该属性意义不大,并且常常被覆盖,可是他是指向构造函数的,咱们在类型判断的地方也许用获得。code
建立新实例后,实例内部包含一个[[Prototype]]的内部属性(指针,__proto__),指向构造函数的prototype,这个关系是你搞不掉的,咱们这里有几个方法须要各位记住:
咱们经过isPrototypeOf来肯定某个对象是否是个人原型
hasOwnPrototype 能够检测一个属性是存在实例中仍是原型中
意思是该属性不能是原型属性才返回true
说了这么多,咱们来上个图吧:
1 var Person = function (name, age) { 2 this.name = name; 3 this.age = age; 4 }; 5 Person.prototype.getName = function () { 6 return this.name; 7 }; 8 var y = new Person('叶小钗', 30);
咱们通常是这样干的,可是name与age在外边是能够访问的哟。
1 var s1 = Person.prototype.isPrototypeOf(y); //true; 2 var s2 = y.hasOwnProperty('name'); //true 3 var s3 = y.hasOwnProperty('id'); //false 4 var s4 = y.hasOwnProperty('getName');//false
咱们这里直接上图了,由于咱们的Person函数继承自Object构造函数,说白了就是Person的prototype是object构造函数的一个实例:
因为以前写过相似的文章,这里就很少说了。
1 var proto = { a: 1 }; 2 function cls() { }; 3 var obj1 = new cls(); 4 cls.prototype = proto; 5 //obj1.a如今是什么?
这里cls是做为构造函数使用的,obj1实例化后其内部属性[[Prototype]]指向cls的原型对象(这里至关于一个复制),后面改变了构造函数的原型指向
这道题其实在勾引咱们,咱们颇有可能就会回答说1,其实答案是undefined。由于构造函数cls建立后,其原型对象已经造成,最后只是切断了cls和其原型的联系,
obj1的__proto__([[Prototype]])依旧指向原来的那个原型,而不是proto。
1 function cls() { }; 2 var obj1 = new cls(); 3 cls.prototype.a = 1; 4 //obj1.a如今是什么? 5 alert(obj1.a);
这道题与上题有所不一样,虽然过后更改了原型,可是都是更改的堆上的同一对象,因此答案是1
我找到了一个闭包的题目,顺便拿出来吧
1 function build() { 2 var i; 3 return function () { alert(i++); } 4 } 5 var f1 = build(); 6 var f2 = build(); 7 var s1 = f1 == f2; 8 var s = ''; 9 //请说明:f1和f2是不是同一函数,分别调用f1() f2()会产生什么效果。
这道题有点意思哦,为了让其运行正常,咱们给i一个1吧。
如果这里将函数返回值去掉的话,f1与f2就是同样的了,可是因为里面产生了闭包,因此f1与f2各自维护着本身的环境与闭包。
咱们来理一理这道题:
5行执行时候会建立一个执行环境,以及相关做用域链,而后初始化arguments以及this,最后与i、以及匿名函数一块儿初始化造成了活动对象(有问题请提出)
5行结束后,执行环境以及做用域链被回收,可是活动对象被留了下来。
在第六行f2初始化时,又从新执行了一次这个过程。
因此其最后调用时候所使用的活动对象不一致,因此两个函数不是一个函数啦。
错误:我刚刚吃饭时候想了下,这里的活动对象应该不包括this
PS:我暂时找不到好的题目了,若您有好的题目,请留下
今天作了一次回顾,下面点再学习其它知识吧,如今先去吃个饭吧。