第一题
var fun = function(){ this.name = 'peter'; return { name: 'jack' };}var p = new fun();//请问p.name是: jack//每个函数都有返回值,如果应用了return语句,则返回return后跟的值,如果没有应用return,则默认返回undefined.//特地的,如果这个函数是构造函数,则默认返回this对象,如果构造函数内应用了return语句,并且return后跟的是一个对象,则这个构造函数返回 的是这个对象,否则返回this.
第二题
var fun = function(){ this.name = 'peter'; return 'jack'; }var p = new fun();//请问p.name是: peter
第三题
var fun = function(){}fun.prototype = { info : { name : 'peter', age : 25 }}var a = new fun();var b = new fun();a.info.name = 'jack';b.info.name = 'tom';//请问a.info.name和b.info.name别离是:tom tom
第四题
var fun = function(){ this.info = { name : 'peter', age : 25 }}var a = new fun();var b = new fun();a.info.name = 'jack';b.info.name = 'tom';//请问a.info.name和b.info.name别离是:jack tom //构造函数的毛病:同一个构造函数的多个实例化之间无奈共享属性。
第五题
var fun = function(){}fun.prototype = { name : 'peter', age : 25 }var a = new fun();var b = new fun();a.name = 'jack';b.name = 'tom';//请问a.name和b.name别离是: jack tom//考查this指针指向该函数被调用是的对象,别离是a对象,b对象//第五题是有区别的,a.name实例自身没有,给以后a这个实例对象执行赋值操作,没有去拜访原型上的name。就相当于第三题先拜访了原型上的info对象,第五题没有拜访过程,只是在实例上增加了name属性值。
第六题
var fun = function(){ this.info = { name : 'peter', age : 25 }}fun.prototype = { info : { name : 'peter', age : 25 }}var a = new fun();var b = new fun();a.info.name = 'jack';b.info.name = 'tom';//请问a.info.name和b.info.name别离是:jack tome//原型模式执行流程:先找构造函数实例的属性或办法,没有再去原型对象找。
解答:
构造函数:JavaScript 通过构造函数生成新对象,因而构造函数能够视为对象的模板。实例对象的属性和办法,能够定义在构造函数外部。
1,2题考查的是构造函数的返回值的问题。
每个函数都有返回值,如果应用了return
语句,则返回return
后跟的值,如果没有应用return
,则默认返回undefined
.
特地的,如果这个函数是构造函数,则默认返回this
对象,如果构造函数内应用了return
语句,并且return
后跟的是一个对象,则这个构造函数返回的是这个对象,否则返回this
.
所以1题中的p = {name: 'jack'}
,而2题中的p = {name: 'peter'}
.
3, 4, 5, 6题都是考查prototype
的常识。prototype
为了补救构造函数的毛病(同一个构造函数的多个实例之间,无奈共享属性,从而造成对系统资源的节约).
JavaScript 继承机制的设计思维就是,原型对象的所有属性和办法,都能被实例对象共享。也就是说,如果属性和办法定义在原型上,那么所有实例对象就能共享,不仅节俭了内存,还体现了实例对象之间的分割。
留神:
第三题 a.info.name这段代码,首先去拜访了实例对象自身是否有info这个对象,发现没有就去原型上查找了,发现原型上有,所以地址共享了失去的值都是Tom;
第五题是有区别的,a.name实例自身没有,给以后a这个实例对象执行赋值操作,没有去拜访原型上的name。就相当于第三题先拜访了原型上的info对象,第五题没有拜访过程,只是在实例上增加了name属性值。
为什么第三题是原型查找,第五题是赋值???
第3题和第5题还考查this指针 -参考