日期:2014-05-16  浏览次数:20360 次

js类型问题
function Obj(){
                this.a=[]; //实例变量
                this.fn=function(){ //实例方法

                }
            }

            var o1=new Obj();
            o1.a.push(1);
            o1.fn={};
            console.log(o1.a); //[1]
            console.log(typeof o1.fn); //object
            var o2=new Obj();
            console.log(o2.a); //[]
            console.log(typeof o2.fn); //function

请问下为啥o1和o2 fn属性类型不同呢?
------解决方案--------------------
要理解一点:JavaScript的变量名都只是名称而已。 typeOf 运算会查找其所指向的具体对象。
function Obj(){
                this.a=[]; //实例变量
                this.fn=function(){ //实例方法
                   // 这个构造函数,将对象的fn属性默认指向一个函数
                }
            }

            var o1=new Obj();
            o1.a.push(1);
            o1.fn={};   // 人为将属性名 fn 指向一个对象
            console.log(o1.a); //[1]
            console.log(typeof o1.fn); //object
            var o2=new Obj();
            console.log(o2.a); //[]
            console.log(typeof o2.fn); //function,因为没有改变 fn 引用的对象

------解决方案--------------------
我觉得楼主问着问题主要疑惑在 不熟悉这种写法
o1.fn={}; 这其实就是创建了一个空 对象

比如你可以这样建person对象

var person = new Person(jack, 26);  

也同样可以这样

var person = {name:"jack", age: 26 };

我想这么对比下你就明白 {} 是个空对象。所以typeof 就是object
------解决方案--------------------
因为对象不同的