这是在博客园看到的几道题一直着摸不透,我重新编辑了过来。请各位大大解下思路!
原地址:http://www.cnblogs.com/rexy/p/4086186.html
第一题
var fun = function(){
this.name = 'peter';
return {
name: 'jack'
};
}
var p = new fun();
//请问p.name是:
第二题
var fun = function(){
this.name = 'peter';
return 'jack';
}
var p = new fun();
//请问p.name是:
第三题
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分别是:
第四题
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分别是:
第五题
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分别是:
第六题
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分别是:
1,2题考察的是构造函数的返回值的问题。
每个函数都有返回值,如果使用了
return
语句,则返回return
后跟的值,如果没有使用return
,则默认返回undefined
.特别的,如果这个函数是构造函数,则默认返回
this
对象,如果构造函数内使用了return
语句,并且return
后跟的是一个对象,则这个构造函数返回的是这个对象,否则返回this
.所以1题中的
p = {name: 'jack'}
,而2题中的p = {name: 'peter'}
.3, 4, 5, 6题都是考察
prototype
的知识。以下内容我假设你知道一些面向对象的概念。
js里面,一个实例(以下都用p)的[[proto]]属性指向这个类(以下用fun)的原型,如果用等号表示指向的话就是
p.[[proto]] = fun.prototype
然后另一条规则就是,当访问一个对象a的属性时,会先检查a是否有这个属性,如果有,则返回这个属性的值,如果没有则检查a的[[proto]]是否有该属性,有则返回,无则继续检查a的[[proto]]的[[proto]]直到检查到或者[[proto]]为null为止。
注:[[proto]]是ECMAScript标准里的属性,浏览器实现的时候使用的是
__proto__
所以第3题:
他们是属于引用相等,所以更改a.info.name的值时,b.info.name, fun.prototype.info的值也会跟着改变。
4,5,6 题不再累述。