基础知识
<!-- 基本数据类型 number string boolean null undefined -->
<!-- 引用数据类型 object(Function Array RegExp Date) -->
<!-- es6提供一个基本数据类型Symbol 代表了唯一的一个数,不可以new -->
<script>
/* 用symbol包裹的数据是唯一的 */
/* 首字母开头大写的叫构造函数,可以new
let obj=new Object();
console.log(obj); */
let obj={
[Symbol('username')]:'zhangsan'
}
console.log('old',obj);
obj.username='lisi';
console.log('new',obj);
//[]如果里面是一个变量,可以直接写o[user1],这里面的user1就是一个变量
let user1='username';
let o={};
o.user1='zhangsan';//==o['user1']='zhangsan'
console.log(o);
o[user1]='zhangsan';
console.log(o);
let car=Symbol('car');
let obj1={
[car]:'bmw'
}
obj1.car='audi';
console.log(obj1.car);
console.log(obj1[car]);
栈内存和堆内存
/* 引用数据类型,会开辟一个内存(栈内存[内存的地址]和堆内存[内存的值]) */
let obj1={name:'zhangsan',age:20}
let obj2={};
/* 把obj1的地址给了obj2 */
obj2=obj1;
/* 把obj1的堆内存的name值由zhangsan改成了lili */
obj2.name='lili'
/* obj1和obj2的值都是一样的,其实都是obj1的堆内存的值 */
console.log('obj1',obj1);
console.log('obj2',obj2);
es6的conest
/* var let */
/* let不能重复定义 let具有块级作用域(暂时性的死去) var可以变量提升 */
/* 定义常量 不能给常亮重复赋值*/
const url='http;//timemeetyou.com/api/privation/v1/';
ur1='http://www.baidu.com'
console.log(ur1);
/*定义对象,引用数据类型,会开辟一个堆内存
地址不会被改变,也不会报错 */
const obj={
'name':'zhangsan'
}
obj.name='1111'
obj.age=20;
console.log(obj);
/* let obj2={}
obj=obj2
改变内存地址会报错 */
面向对象02
/* 构造函数的方式 */
/* obj是Object new出来的一个实例化对象 */
/* let obj = new Object();
obj.name = 'taotao';
obj.age = 30;
obj.kaiche = function () {
document.write(`${obj.name}--年纪${obj.age}会开车`);
}
obj.kaiche(); */
/* 对象字面量
对象定义的一种简写形式
简化创建包含大量属性的对象的过程 */
/* let obj = {
'name': 'taotao',
'age': 30,
'kaiche': function () {
console.log('this', this);
document.write(`${this.name}--年纪${this.age}会开车`);
}
}
obj.kaiche(); */
工厂模式
/* 软件工程领域的一种设计模式 */
/* 缺点:看不出类型--解决(构造函数)
函数重复,浪费资源--解决(原型) */
function getPerson(name,age,job,address){
let person=new Object();
person.name=name;
person.age=age;
person.job=job;
person.address=address;
person.intro=function(){
document.write(`
<p>姓名:${person.name}</p>
<p>年龄:${person.age}</p>
<p>工作:${person.job}</p>
<p>住址:${person.address}</p>
`);
}
return person
}
let person1=getPerson('张三',30,'工人','南京');
person1.intro();
let person2=getPerson('李四',30,'工人','南京');
person2.intro();
构造函数
<!-- 系统提供的构造函数 -->
<!-- String Number Boolean Object Date Array RegExp -->
<!-- 与工厂模式对比
没有显示创建对象
直接将属性和方法赋给了this对象 -->
<script>
function Person(){
this.name='zhangsan';
this.fn=function(){
document.write(this.name);
}
}
/* new 先创造了一个实例化对象,并且把this给了实例化对象per1 */
let per1=new Person();
per1.fn();