创建对象的方式有三种
- 调用系统的构造函数创建对象
var 变量名= new Object(); Object 是系统的构造函数
- 自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象)
- 字面量的方式创建对象
一、调用系统构造函数创建对象
//实例化对象
var obj = new Object();
//对象有特征(属性)和行为(方法)
//添加属性 对象.名字=值;
obj.name = "小杨";
obj.age = 25;
obj.sex = "男"
//添加方法 对象.名字=函数;
obj.eat = function() {
console.log("我喜欢吃土豆牛肉辣椒");
};
obj.play = function() {
console.log("我喜欢跑步,打篮球,打乒乓球")
}
obj.cook = function() {
console.log("洗菜")
console.log("切菜")
console.log("下锅")
console.log("放料")
console.log("出锅")
console.log("吃")
}
console.log(obj.name);
console.log(obj.age);
console.log(obj.sex);
obj.eat();
obj.play();
obj.cook();
二、自定义构造函数创建对象
// 自定义构造函数创建对象,需要自定义一个构造函数,然后才能创建对象
//函数和构造函数的区别是:构造函数的首字母是大写的,函数的首字母是小写的
function Person(name,age){//自定义构造函数
this.name=name;
this.age=age;
this.sayHi=function(){
console.log("我叫:"+this.name+",今年"+this.age+"岁");
};
}
//通过自定义的构造函数来创建对象
var arr= new Person("社会王",18);
console.log(arr.name);
console.log(arr.age);
arr.sayHi();
自定义构造函数创建对象的时候,发生了四件事
1. 在内存中开辟空间(申请一块内存),来存储创建的新的对象
2. 把this设置为当前的对象
3. 设置对象的属性和方法值
4. 把this这个对象返回
2.1工厂模式创建对象
如何获取该变量(对象)是不是属于什么类型
语法:
变量 instanceof 类型的名字----->输出是布尔类型,true表示是这个类型,false表示不是这个类型
在当前的对象的方法中,可以用this关键字代表当前的对象
//人的对象
var person = new Object();
person.name = "小黑";
person.age = 20;
person.sayHi = function() {
console.log("你好,我在吃饭,我叫:" + this.name); //在当前的对象的方法中,可以用this关键字代表当前的对象
};
person.sayHi()
console.log(person instanceof Object); //instanceof判断是不是这个类型,输出值为布尔类型
// 把创建对象的代码封装到一个函数里面,可以一次性创建多个对象
// 工厂模式创建对象
function createObject(name, age) {
var obj = new Object(); //创建一个对象
//给对象添加属性
obj.name = name;
obj.age = age;
//给对象添加方法
obj.eat = function() {
console.log("你好,我叫:" + this.name + "今年" + this.age + "岁");
}
return obj;
}
var students=createObject("社会王", 22);
students.eat();
三、字面量方式创建对象
//字面量方式创建对象
var obj={};//空对象
//添加属性
obj.name="小白";
obj.age=8;
obj.sayHi=function(){
console.log("我是哮天犬");
};
obj.sayHi();
console.log(obj.age);
var a = "1";
var tObj = {
a : "2",
tFunc : function (){
var a = "3";
alert(this.a)
}
}
tObj.tFunc();
// 字面量的方式创建对象的缺陷:一次性的对象
var obj2={
name:"小明",
age:"8",
sex:"女"
};
obj2.name="柯南";
console.log(obj2.name);
//点语法: 对象.名字=值; 对象.名字=函数; 没有什么点什么就有了
区别
- 共同点
都是函数,都可以创建对象,都可以传入参数
- 不同点:
工厂模式:
函数名是小写
有new,
有返回值
new之后的对象是当前的对象
直接调用函数就可以创建对象
自定义构造函数:
函数名是大写(首字母)
没有new
没有返回值
this是当前的对象
通过new的方式来创建对象
总结
js是一门什么样的语言 是一门解释性语言 是一门脚本语言 是一门弱类型的语言,声明变量都用var 是一门基于对象的语言
是一门动态类型的语言:
- 代码(变量)只有执行到这个位置的时候,才知道这个变量中到底存储了什么,如果是对象,就有对象的属性和方法,如果是变量,就是变量的作用
- 对象没有什么,只要点了,通过点语法,那么就可以为对象添加属性或者方法