对象:由属性和方法组成,用键值对定义,用于将数据和功能组织到一起
新建对象:
一)new构建: new Object ()
二)字面量定义:
var obj = { key : value, //属性 fn : function(){ //方法 } }
var obj1 = new Object(); //创建空对象 obj1.name = '张三'; //赋值 obj1.age = 23; var obj2 = new Object({name:'张三',age:'23'}); //创建空对象的同时,初始化处理 var obj3={}; //创建空对象,常用字面量定义
对象引用:
对象名.属性名 对象名.方法名[实参]
对象名[属性名]
console.log(obj4.name); //console.log(obj3["name"]); obj4.fn('Hello','hahahaha'); var str = 'aa'; console.log(obj5[str]); //当属性名为变量时,只能用[]取值,且不能加""
面向对象(工厂模式):不推荐,不推荐,不推荐!
成批创建相似对象,结构相同
封装函数实现,缺点:不知创建的对象是哪个对象的实例
function createObj(name,age){ var obj = new Object(); obj.name = name; obj.age = age; obj.fn = function(){ return this.name+this.age; } return obj; } var obj1 = createObj('张三',23); var obj2 = createObj('李四',24); console.log(obj1.fn()); //调方法
构造函数创建类创建对象:推荐,推荐,推荐!
顺序:一)new构造函数,后台执行new Object();
二)new Object()参数代入构造函数的参数;
三)执行构造函数的代码;
四)返回新对象。
function Person(name,age){ //构造函数首字母大写,实际为创建一个类 this.name=name; //this表示实例化后的对象 this.age=age; this.fn = function(){ return this.name+this.age; } } var obj1 = new Person('张三',23); console.log(obj1); //Person{name:"张三",age:23,fn:function()} console.log(obj1.name); //张三 console.log(obj1 instanceof Object); //true console.log(obj1 instanceof Person); //true
console.log(typeof obj); //typeof用来获取data类型,引用类型返回object var arr = [1,2,3]; console.log(arr instanceof Object); //引用类型都属于Object,true console.log(arr instanceof Array); //true