文本标识法和定义变量差不多,像这样
var obj = {name:'HanMM','2':'Dali'};
函数构造器法
先创建一个对象函数
function Obj() {
this.address='New York' ,
this.sayHello = function (){
return this.address;
}
}
然后用new关键字来穿件具体的对象
var obj001 = new Obj();
然后我们就可以调用对象了
obj.name// HanMM
obj['2']//Dali
obj.sayHello();//New York
而如果,我们在使用构造器函数创建对象的时候忘了使用new关键字的话,像这样 var obj002=Obj();去实例化的话,其实和声明函数没有区别,由于该函数没有显式返回值,那么返回值为undefined,我们只是创建了一个函数,而非对象的实例。
当我们想访问其中的某个属性时得到的结果也只能是 Uncaught TypeError: Cannot read property 'address' of undefined
返回对象的函数
function tom(Name) {
return { name: Name }
} ;
var obj007 = tom('王大锤') ;
obj007.name;// 王大锤
obj007.constructor;// ==>> function Object();
constructor property 构造器属性,其实就是一个指向于一个用于创建该对象的构造器函数的引用;
也就是说function TomG(){}; var obj004= new TomG();
obj004.constructor;// ==>> function TomG();
而如果使用文本标识法创建的对象var tomG = {};
tomG.constructor 相当于使用js内置构造器Objet()函数创建的,故 tomG.constructor; // ==>> function Object();
PS其实构造器函数也是可以返回对象的,且当且仅当构造器函数返回的是对象的时候才可以当做对象使用,若返回其他类型的数据则此时的对象是this,即window;
function Objs() {
this.address='New York' ;
return { home:'London' }
}
var obj008 = new Objs();
typeof obj008.address;//undefined;
obj008.home;//London;