1.es6模板字符串:
let title = '快过年了'
let year = 2022;
let str = `我是李宁--${year}--${title}`
console.log(str);
es6 const:
/* var let */
/* let 不能重复定义 let块级作用域,闭包功能暂时性死区 var变量提升 */
/* const 用来定义常量的 */
/* 不能给常量重复赋值 */
const url = 'http://timemeetyou.com:8889/api/private/v1/'
/* 定义对象 引用数据类型 会开辟一个堆内存 内存地址会变*/
/* 地址不会被改变 也就不会报错 */
const obj = {
name:'zhangsan'
}
obj.name = 'lili'
obj.age = 20
/* 改变obj内存地址会报错 */
let obj2 = {};
obj = obj2;
console.log(obj);
2.面向对象:
数据基本类型概念:
console.log('1'==='1');/* =>true */
console.log(Symbol('1') == Symbol('1'));
/* 用Symbol包裹的数据是唯一的,独一无二的,不能new */
let obj = {[Symbol('username')]:"zhangsan"}
console.log('old',obj);
obj.username = 'lisi'
console.log('new',obj);
/* [] 如果里面是一个变量,可以直接写 o[user1]
这里面的user1 就是一个变量
o['user1'] =>{user1:'zhangsan'}
let user1 = 'username';
let o = {};=>{username:'zhangsan'}
o[user1] = 'zhangsan*/
面向对象的基本概念:
/* 基于obj创建的对象 */
/* Object就是一个类
obj 实例化出来的一个对象 */
let obj = new Object();
obj.name = 'dd';
obj.age = 18
/* 对象字面量 */
对象举例:
let car = Symbol('car');
let obj = {
[car]:'bmw'
}
obj.car = 'audi'
console.log(obj);
console.log(obj[car]);
对象构造函数的方式:
let car = Symbol('car');
let obj = {
[car]:'bmw'
}
obj.car = 'audi'
console.log(obj);
console.log(obj[car]);
**面向对象的工厂模式:**
/* let person = new Object();
person.name = '刘培茄';
person.age = 30;
person.job = '磨刀石';
person.address = '广东茂名'
person.intro = function(){
document.write(`姓名:${person.name}
年龄:${person.age}
工作:${person.job}
住址:${person.address}`)
}
person.intro() */
/* 工厂模式 */
/* 弊端: 看不出类型 解决:构造函数
时间对象会具有事件对象的属性和方法
函数重复,浪费资源 ,消耗内存 解决:原型*/
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(`姓名:${this.name}
年龄:${this.age}
工作:${this.job}
住址:${this.address}
`
)
}
return person
}
let person1 = getPerson('张三',30,'工人','南京市雨花区');
person1.intro();
let person2 = getPerson('茄子',30,'磨刀石','广东茂名');
person2.intro();
3.栈内存和堆内存:
/* 引用数据类型会开辟一个内存(栈内存)和(堆内存) */
let obj1 = {name:'zhangsan',age:20};
let obj2 = {};
/*obj1的栈内存地址给了obj2 */
obj2 = obj1;
console.log(obj2);
/* obj2把obj1的堆内存的name值 由zhangsan改成了lili */
obj2.name = "lili"
/* 所有obj1 和obj2 的值都是一样的 其实都是obj1的堆内存的值 */
console.log('obj1',obj1);
console.log('obj2',obj2);
4.构造函数:
function Person(){
this.name = '张三'
this.fn = function(){
document.write(this.name)
}
}
/* new 先创造了一个实例化对象并且把this给了实例化对象per1 */
function person(){}
let per1 = new Person();
console.log(per1);