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
------解决方案--------------------因为对象不同的