浏览 1513 次
|
锁定老贴子 主题:浅谈javascript之new
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2007-01-16
我们知道,new就是创建一个对象的意思。那么在javascript中,哪些是可以new的呢?请看:
1>var i = new Number( '1' ); 2>var b = new Boolean( true ); 3>var s = new String( 'a' ); 4>var f = new Function( 'alert( 1 );' ); 5>var obj = new Object;// var obj = new Object(); 6>var temp = function( a, b ) { this.a = a; this.b = b; } var t = new temp; 这6种情况下typeof i,typeof b,typeof s,typeof f,typeof obj,typeof t都返回JS之'object'串。 顺便说说,关于typeof,instanceof和constructor,大家知道可以用来进行对象的一些非空判断或类型辨别。这里说说第5,6种情况, obj instanceof Object返回true; t instanceof temp返回true且 t instanceof Object也返回true;这也就是Object和Function的一点区别了。这里扩展一下,凡是Function类型的对象都可以调用Object的prototype,但返过来就不行。记住:是类型的对象,比如temp只可以调用Function.prototype,但new temp既可以调用temp.prototype也可以调用Object.prototype。 所以,当我们遍历new temp的所有prototype的时候,拿到的除了定义在temp内部的成员变量a,b外,还有temp.prototype的所有成员以及Object.prototype的所有成员。最后关于constructor,凡对象.constructor返回都是Function类型。即typeof XXX.constructor == 'function'返回true。比如上例中: new temp().constructor == temp返回true,但temp.constructor == Function返回true; new Object().constructor == Object返回true。 最后回忆一下JS之Object,Function,Number,String,Boolean,undefined,后面一个就不说了。前面5个typeof一下都是'function'串。例:alert( typeof Object == 'function' );和alert( Object );就明了了。(这也就是为什么XXX.constructor可以直接和她们画等号的原因。) 希望对大家有所帮助! 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2007-01-16
收益匪浅,呵呵,沙发
|
|
| 返回顶楼 | |
|
时间:2007-02-07
大家如果有新的理解或者想法,给点建议啊。
|
|
| 返回顶楼 | |
|
时间:2007-02-07
引用 比如temp只可以调用Function.prototype,但new temp既可以调用temp.prototype也可以调用Object.prototype。
temp 不是也可以调用toString这样的方法的吗 这些也是Object.prototype 的方法啊(存在overwrittn的可能的) 只要typeof == function 或者 typeof == object 都可以调用 Object.prototype方法吧? |
|
| 返回顶楼 | |
|
时间:2007-02-08
jianfeng008cn 写道 引用 比如temp只可以调用Function.prototype,但new temp既可以调用temp.prototype也可以调用Object.prototype。
temp 不是也可以调用toString这样的方法的吗 这些也是Object.prototype 的方法啊(存在overwrittn的可能的) 只要typeof == function 或者 typeof == object 都可以调用 Object.prototype方法吧? ”,我给点补充,其实只要是变量或对象都有Object.prototype的原形属性。 比如:var i = 1; 这里i就可以调用Object.prototype。 |
|
| 返回顶楼 | |







