function C1(name){ if(name) this.name=name;}function C2(name){ this.name=name;}function C3(name){ this.name=name||'john';}//C1.prototype.name="Tom";C2.prototype.name="Tom";C3.prototype.name="Tom";alert((new C1().name)+(new C2().name)+(new C3().name));//我理解的本地name都没声明,访问的都是prototype的name属性//所以有个疑问就是没有声明的属性也可以去原型里找吗//不是应该声明没赋值才有用么
2 回答
斯蒂芬大帝
TA贡献1827条经验 获得超8个赞
C1,if不成立,new C1()中没有name属性,就访问到了原型上的name,输出tom
C2,既然没有参数,也就是执行new C2(undefined),所以name为undefined
C3,new C3()的name值为john,所输出john
哈士奇WWW
TA贡献1799条经验 获得超6个赞
你的问题在于在构造实例时没有声明name
,因为根本没有为构造函数传参数,那么真是如此吗?
function test(t) { console.log(t);//undefined console.log(a);//报错} test();
可以看到,即使没有给一个带参的函数传参,也能访问到这个参数,这个参数的值是undefined
。
这其实涉及到arguments
,js函数定义时的参数其实是不必要的,因为函数内部其实访问的是一个类数组对象arguments
,传进来的参数依次放到这个对象中。
function test(t) { console.log(arguments[0]);//undefined console.log(arguments[1]);//undefined} test();
所以第一个构造函数没有声明和初始化name
,实例去原型中找name属性。但剩下的两个构造函数为name
赋值undefined
。
所以这道题的答案是:Tomundefinedjohn
。
添加回答
举报
0/150
提交
取消