JS是一种基于对象的语言,和其它面向对象语言不同
引用类型是一种数据结构,将数据和功能组织在一起,常被称为类
基本数据类型 String Boolean Number Null Undefined Symbol
引用数据类型 Object(Array RegExp Function Date)
Symbol独一无二的值 不可以new
【系统提供的构造函数 】
构造函数一般以大写字母开头
构造函数也是函数,只不过可以用来创建对象
与工厂模式对比
没有显式创建对象
直接将属性和方法赋给了this对象
没有return
function Person(){
this.name = '张三'
this.fn = function (){
document.write(this.name)
}
}
new 先创造了一个是实例化对象 并且把this给了实例化对象per1
也就是把属性和方法给了per1
let per1 = new Person();
console.log(per1);
【面向对象】
基于Object的方式创建对象
Object 类
obj 实例化出来的对象
let obj = new Object();
obj.name = '涛涛';
obj.age = '30';
obj.playGame = function (){
document.write('我nba2k 超级溜');
}
document.write(obj.name + '
');
document.write(obj.age + '
');
obj.playGame();
【(第一种同上一样)】
【第一种】
obj是Object new出来的一个实例化对象
let obj = new Object()
obj.name = 'taotao'
obj.age = 30
obj.kaiche = function (){
document.write( `{obj.age} 会开车` );
}
obj.kaiche();
【第二种方式】
let obj = {
"name":"taotao",
"age":30,
"kaiche":function (){
console.log('this',this);
document.write( `{this.age} 会开车` );
}
}
(注:this是谁调用就是谁的 )
obj.kaiche()
console.log(obj);
对象字面量
对象定义的一种简写形式
简化创建包含大量属性的对象的过程
在为函数传递大量可选参数时,可考虑使用对象字面量
引用数据类型 会开辟一个内存(栈内存(内存的地址) 和 堆内存(内存的值) )
let obj1 = {name:'zhangsan',age:20};
let obj2 = {};
obj1的栈内存的地址给了obj2
obj2 = obj1;
obj2 把obj1的堆内存的name值 由zhangsan 改成了 lili
obj2.name="lili"
所以 obj1 和 obj2 的值 都是一样的 其实都是obj1的堆内存的值
console.log('obj1',obj1);
console.log('obj2',obj2);
function getPerson(name,age,job,address){
( Date.now() 也是获得毫秒数 获取的速度比getTime方法要快 )
let person = new Date();
let person = new Object();
person.name = name
person.age = age
person.job = job
person.address = address
person.intro = function (){
document.write(
`
姓名:${this.name}
年纪:${this.age}
工作:${this.job}
地址:${this.address}
`
);
}
return person;
【工厂模式】
【方法一】
let person1 = getPerson('张三',30,'工人','南京市江宁区')
person1.intro();
let person2 = getPerson('涛涛',40,'纺织工人','南京市秦淮区')
person2.intro();
let person3 = getPerson('涛涛2',40,'纺织工人','南京市秦淮区')
person3.intro();
【方法二】
@param name String 姓名
@param age Number 年纪
@param job String 职业
@param address String 住址
console.log(person1.name);
console.log(person1.age);
console.log(person1.job);
console.log(person1.address);
软件工程领域的一种设计模式
抽象了创建对象的过程
通过函数封装创建对象的细节
工厂模式的缺点
看不出类型(比如是时间对象 会具有时间对象的属性和方法)--解决:构造函数
函数重复、浪费资源(消耗内存)--解决:原型