1.es6模板字符串:
<script>
let title = '快过年了'
let year = 2022;
let str = `我是李宁--${year}--${title}`
console.log(str);
</script>
es6 const:
<script>
/* 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);
</script>
2.面向对象:
数据基本类型概念:
<!-- 基础数据类型 number string boolean null undefined -->
<!-- 引用数据类型 object (function Array RegExp) -->
<!-- es6 提供一个基本数据类型Symbol -->
<!-- Symbol代表了唯一的一个数,不可以new -->
<script>
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*/
</script>
面向对象的基本概念:
<!-- JS是一种基于对象的语言,和其他面向对象语言不同 -->
<script>
/* 基于obj创建的对象 */
/* Object就是一个类
obj 实例化出来的一个对象 */
let obj = new Object();
obj.name = 'dd';
obj.age = 18
/* 对象字面量 */
</script>
对象举例:
<script>
let car = Symbol('car');
let obj = {
[car]:'bmw'
}
obj.car = 'audi'
console.log(obj);
console.log(obj[car]);
</script>
对象构造函数的方式:
<script>
let car = Symbol('car');
let obj = {
[car]:'bmw'
}
obj.car = 'audi'
console.log(obj);
console.log(obj[car]);
</script>
**面向对象的工厂模式:**
<script>
/* let person = new Object();
person.name = '刘培茄';
person.age = 30;
person.job = '磨刀石';
person.address = '广东茂名'
person.intro = function(){
document.write(`姓名:${person.name}
<br>年龄:${person.age}
<br>工作:${person.job}
<br>住址:${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}
<br>年龄:${this.age}
<br>工作:${this.job}
<br>住址:${this.address}<br>`
)
}
return person
}
let person1 = getPerson('张三',30,'工人','南京市雨花区');
person1.intro();
let person2 = getPerson('茄子',30,'磨刀石','广东茂名');
person2.intro();
</script>
3.栈内存和堆内存:
<script>
/* 引用数据类型会开辟一个内存(栈内存)和(堆内存) */
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);
</script>
4.构造函数:
<!--系统提供的构造函数 一般大写开头 构造函数也是函数,只不过可用来创建对象
与工厂模式相比 没有显示创建对象 直接将属性和方法赋给this对象
String Number Boolean Object RegExp Date Array -->
<script>
function Person(){
this.name = '张三'
this.fn = function(){
document.write(this.name)
}
}
/* new 先创造了一个实例化对象并且把this给了实例化对象per1 */
function person(){}
let per1 = new Person();
console.log(per1);
</script>