数据类型
数字、字符、布尔值、null
undefined:
1.一个变量声明了,但没有赋值 var a;
2.var c=undefined;
3.一个对象中,获取某个不存在的属性
var d={};d.age;
构造函数返回值类型
1.没有返回值或者返回值是基本数据类型,则返回的是构造函数对象
2.返回值不是基本数据类型,则返回的是数据本身
继承
1.js中的继承
通过某种方式,让一个对象可以访问到另一个对象中的属性和方法。
2.为什么要使用继承
其实他们有共同的父对象,可以通过:
Person.prototype来获取。
只要把say方法写在Person.prototype中,那么say方法就是同一个方法。
例:
结论:只要往某个构造函数的prototype对象中添加某个属性、方法,那么这样的属性、方法都可以被所有的构造函数的实例所共享。
构造函数的prototype对象称为原型对象。
//p1和p2的原型对象。
继承的实现方式1:
原型链继承1
原型链继承2
一定要先改变原型再创建对象,否则对象的原型是旧原型,访问不了改变的新原型。
原型链
概念:JS里面的对象可能会有父对象
根本:继承
-属性:对象中几乎都会有一个_proto_属性 ,指向它的父对象
-意义: 可以实现让该对象访问到父对象中的相关属性
根对象:object.prototype
-var arr=[1,2,3]
-arr.proto=Array.prototype
-arr.proto.proto=object.prototype
闭包
变量作用域:全局变量、局部变量
内层匿名函数可以访问外层函数的变量,称为闭包函数。
闭包应用场景:模块化,防止变量被破坏。
函数的调用方式
函数调用:函数内部的this指向window。
方法调用:函数内部的this指向调用该方法的对象。
构造函数调用:函数内部的this指向该构造函数的实例。
上下文调用:call、apply、bind
ES6
模板字符串
解构赋值
rest参数
箭头函数
用于替换匿名函数
assgin
进行对象的浅拷贝。
var source={age:18,height:175}
var newObj={}
Object.assign(newObj,source);//Object.assign进行对象的浅拷贝,是两个不同的对象.
对象扩展运算符
var car={brand:“BMW”,price:“368000”,length:“4米”}
//克隆一个和car完全一样的对象出来:
var car2={…car}//不同对象
//新车,和car的长度不同,其他都相同
var car3={…car, length:“5米”}
//比car多一个属性
var car4{…car,type:“suv”}
Promise
解决(回调地域)的问题
//把异步函数封装在一个promise对象中
/* function fu(){
return new Promise(function(resolve,reject){
setTimeout(function(){
console.log(1);
},1000)
})
} */
function f1(){
return new Promise(resolve=>{
setTimeout(()=>{
console.log(“第一步”);
//告诉外界,执行完了
resolve();
},1000)
})
}
function f2(){
return new Promise(resolve=>{
setTimeout(()=>{
console.log(“第二步”);
resolve();
},1000)
})
}
f1().then(res=>{
return f2();
}).then(res=>{
setTimeout(()=>{
console.log("完成")
},1000)
})
async
用promise封装出来的