首页 新闻 会员 周边 捐助

js困恼我的一个问题

0
悬赏园豆:20 [已解决问题] 解决于 2013-05-02 17:24

我一直有个问题不明,var str1=new String("aaa");var str2="aaa"; String构造函数这三者之间的关系还不是很明了呢,根据面向对象的原理,我发现str1和str2都可以看成String的实例对象(因为通过alert(str2.constructor),显示的是String构造函数,说明str2是通过String函数构造而来的对象),但是str2既然是对象为啥不能通过str2.name="aaa";alert(str2.name);得到name属性呢,而str1可以,恳请大叔解惑,万谢,如果有什么理解错误还请指点

繁华中的孤儿的主页 繁华中的孤儿 | 初学一级 | 园豆:195
提问于:2013-05-02 15:11
< >
分享
最佳答案
0

var str1=new String("aaa");
var str2="aaa";

typeof str1 //object
typeof str2 //string (5中基本类型之一 undefined null Boolean number string )
 

Javascript是一门弱语言 他没有语句块(block) 函数里声明的变量 在函数外也能引用 所以怪异之处 很正常

原因就是基本类型 引用类型的对象生存周期不一样 str1是引用类型,这个有点像面向对象的对象一样。 但是str2是基本类型,他创建的类型的对象,只存在这一行代码执行的瞬间,然后立即销毁。我们不能再运行时为基本类型添加属性和方法。

1 var str2="aaa";
2 str2.name="aaa";
3 alert(str2.name)//undefined

这里访问的str2的name属性不见了是因为第二行创建的对象在第三行访问时已经被销毁了

 

不知楼主明白了不  :)

收获园豆:20
Hejin.Wong | 菜鸟二级 |园豆:229 | 2013-05-02 17:01

恩,谢谢,从数据结构上解释,我还想知道的是作为基本类型的str2它为啥能够像引用类型对象一样访问到String.prototype.name="dfa";alert(str2.name);

繁华中的孤儿 | 园豆:195 (初学一级) | 2013-05-02 17:21
其他回答(2)
0

var str1=new String("aaa"); 其实有两个操作,第一、创建一个String对象,第二给str1 赋值。

var str2="aaa" 只是给一个变量赋值,str2不是对象,只是变量

@@@一统@@@ | 园豆:1551 (小虾三级) | 2013-05-02 15:42

不是吧

var str1=new String("aaa");
var str2=new String();
 str2="aaa";
str1.name="aaa";
str2.name="aaa";

alert(str2.name);  输出  underfine

var str1=new String("aaa");
var str2=new String();
 //str2="aaa";
str1.name="aaa";
str2.name="aaa";

alert(str2.name);  输出  aaa

支持(0) 反对(0) 丫的 | 园豆:1575 (小虾三级) | 2013-05-02 16:12

这个我知道,我是真正想知道的是这3者之间的真正关系

1 var str1="aa";
2 var str2=new String("aa");
3 String.prototype.name="kk";
4 alert(str1.name);//kk
5 alert(str2.name);//kk

关键是作为基本类型的str1弹出constructor属性是function Function(){},和str2是一样,结合上面的代码,我觉得不是类型区别那么简单的解释呢

支持(0) 反对(0) 繁华中的孤儿 | 园豆:195 (初学一级) | 2013-05-02 17:41
0

哦 原来前者是var str1=new String("aaa");

 alter(typeof str1) //输出object
var str2=new String();

 alter(typeof str2) //输出object
 str2="aaa";

 alter(typeof str2) //输出string

 

object属于对象 可以用name属性 输出aaa

所以string没name属性 是underfined

丫的 | 园豆:1575 (小虾三级) | 2013-05-02 16:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册