1. 程式人生 > 實用技巧 >6894. 【2020.11.25提高組模擬】小 S 埋地雷 (loj6611. 摧毀時間線)

6894. 【2020.11.25提高組模擬】小 S 埋地雷 (loj6611. 摧毀時間線)

此文轉載自:https://blog.csdn.net/weixin_50539818/article/details/109999158

文章目錄

ES6總結

var,let,const的區別

1.var 變數可以提升,let,const變數不可以提升
2.var 沒有暫時性死區,let,const有暫時性死區
3.var 允許重複宣告,let,const不可以重複宣告
4.var 和let可以修改宣告的變數,const不可以修改
5.var 沒有塊級作用域,let和const有塊級作用域

箭頭函式和function的區別

1.箭頭函式是匿名函式,不能作為建構函式,不能使用new
2.箭頭函式內沒有arguments,可以用展開運算子...解決
3.箭頭函式的this,始終指向父級上下文(箭頭函式的this取決於定義位置父級的上下文,跟使用位置沒關係,普通函式this指向呼叫的那個物件)
4.箭頭函式不能通過call() 、 apply() 、bind()方法直接修改它的this指向。(call、aaply、bind會預設忽略第一個引數,但是可以正常傳參)
5.箭頭函式沒有原型屬性

結構賦值

1 結構賦值就是從物件或陣列中提取值,吧右邊的值賦給左邊
2 分為資料結構,物件結構,結構賦值,結構物件,從方法中返回

原型

例項化物件和原型的constructor指向建構函式
建構函式的prototype屬性指向原型物件
例項化物件的__proto__屬性指向原型物件
JavaScript裡面每個物件都有一個__paoto__屬性,這個屬性就是他的原型
每個方法裡面都有一個prototype屬性,也是他的原型
constructor prototype 例項化物件的__proto__ 例項化物件和原型 建構函式的 原型物件 原型物件

原型鏈

例項化物件的__proto__指向建構函式的prototype
建構函式prototype的__proto__指向Object.prototype
Object.prototype的__proto__指向null

__proto__ __proto__ __proto__ 例項化物件 建構函式的prototype Object.prototype null

繼承

1.原型鏈繼承

父類的例項做為子類的原型

function Fu(){
	this.arr=['red','blue','green']
}
function Zi(){}
Zi.prototype=new Fu();
var a=new Zi
a.arr.push('black')
2.建構函式繼承

在子類內,使用call呼叫父類方法,並將父類的this修改為子類的this,相當於是吧父類的例項屬性複製了一份放到子類的函式內

function Fu(){
	this.arr=['red','blue','green'];
}
function Zi(){
	Fu.call(this);
}
var a=new Zi();
a.arr.push('black')
console.log(a.arr)
3.組合式繼承

既能呼叫父類例項屬性,又能呼叫父類原型屬性

function Fu(name){
	this.name=name;
	this.arr=['red','blue','green'];
}
Fu.prototype.say=function(){
	console.log(this.name)
}
function Zi(name,age){
	Fu.call(this,name);
	this.age=age;
}
Zi.prototype=new Fu();
var a=new Zi('black',21,'女')
a.say()//成功繼承
4.class類繼承

相當於es5中建構函式
class中定義方法時,前後不能加function,全部定義在class的protopyte屬性中
class中定義的所有方法是不可列舉的
class中只能定義方法,不能定義物件,變數等
class和方法內預設都是嚴格模式
es5中constructor為隱式屬性

class Fu(){
	constructor(name){
		this.name=name
	}
	say(){
		console.log(this.name)
	}
}
class Zi extends Fu{
	constructor(name,age){
		super(name)
		this.age=age
	}
	say(){super.say()}
}
var a=new Zi('張三')
a.say()

Promise

1.概述:Promise是非同步程式設計的一種解決方案,從語法上講,Promise是一個物件,可以獲取非同步操作的訊息
2.目的: (1)、避免回撥地獄的問題(2)、Promise物件提供了簡潔的API,使得控制非同步操作更加容易
3.Promise有三種狀態:pendding //正在請求,rejected //失敗,resolved //成功
4.基礎用法:new Promise(function(resolve,reject){ })
resolved,rejected函式:在非同步事件狀態pendding->resolved回撥成功時,通過呼叫resolved函式返回結果;當非同步操作失敗時,回撥用rejected函式顯示錯誤資訊

$(function(){
    // 封裝一個promise;將url提取出來;
    var  p  = function(url){
        return new Promise(function(resolve,reject){
            $.get(url,function(data){
            resolve(data);
            })
        })
    }
    Promise.all([
            p("https://cnodejs.org/api/v1/topics?tab=good"),
            p("https://cnodejs.org/api/v1/topics?tab=share"),
        ]).then(function(result){
            console.log(result);
        })
})