ES6學習 第十四章 Reflect

2021-09-11 07:17:31 字數 2372 閱讀 9989

//第十四章 reflect

//reflect物件引入目的:

// 1.原本屬於object物件內部方法一些方法放到reflect上,如object.defineproperty

// 2.修改某些object物件的返回結果,object.defineproperty(obj, name, desc)在無法定義屬性時,會丟擲

// 乙個錯誤,而reflect.defineproperty(obj, name, desc)則會返回false。

// 3.讓object的命令式操作變成函式行為,如name in obj和delete obj[name],而reflect.has(obj, name)

// 和reflect.deleteproperty(obj, name)讓它們變成了函式行為。

的方法和proxy的方法一一對應,使用proxy時可以呼叫對應的reflect方法完成預設行為,作為修改行為

// 的基礎

//reflect的靜態方法:

name, receiver):查詢並返回target物件的name屬性,如果name屬性部署了getter,

// 則讀取函式的this繫結receiver

let obj = ,

};let obj2 = ;

console.log(reflect.get(obj, 'c')); //4

console.log(reflect.get(obj, 'c', obj2)); //7

name, value, receiver):設定target物件的name屬性值為value,如果name屬性部署了setter

// 方法,則設定receiver物件的name屬性值

let obj3 =

};let obj4 = ;

reflect.set(obj3, 'seta', 5);

console.log(obj3.a); //5

reflect.set(obj3, 'seta', 8, obj4);

console.log(obj3.a, obj4.a);//5 8

判斷obj裡是否存在name屬性,類似in運算子

console.log(reflect.has(obj3, 'a'));//true

刪除obj裡的name屬性,類似delete運算子

reflect.deleteproperty(obj3, 'a');

args):不使用new來呼叫建構函式,等同於 new target(args)

function obj5(name, age)

let instance = reflect.construct(obj5, ['lily', 9]);

console.log(instance); //obj5

// 定this物件到thisarg上,執行func(args)

// 操作。

const ages = [11, 33, 12, 54, 18, 96];

//舊寫法

const minstring = object.prototype.tostring.call(minnum);

console.log(minnum, minstring);//11 '[object number]'

//新寫法

console.log(minnum2, minstring2);//11 '[object number]'

返回obj的所有屬性,基本等同於object.getownpropertynames與

// object.getownpropertysymbols之和。

let myobject = ;

// 舊寫法

object.getownpropertynames(myobject);// ['foo', 'bar']

object.getownpropertysymbols(myobject);//[symbol(baz), symbol(bing)]

// 新寫法

reflect.ownkeys(myobject);// ['foo', 'bar', symbol(baz), symbol(bing)]

//使用proxy實現觀察者模式

let observequeue = new set();

let observe = function (fn) ;

let observable = function (obj) );

return re;}})

};const person = observable();

function print() , $`)

}observe(print);

person.name = '李四'; //李四, 20

第十四章約束

約束 constraint 是一種保證資料完整性的規則。約束設定在單個字段或者多個字段組合上,寫入這些欄位的行資料必須要符合約束的規則 約束的五種型別 not null 非空約束,指定某列的所有行資料不能包含空值 unique 唯一性約束,指定列或者列的組合的所有行資料必須唯一 primary ke...

第十四章 約束

第十四章 約束 練習1 1.學校有乙個選課系統,其中包括如下關係模式 系 系編號 主鍵,系名稱 唯一鍵,系主任 非空約束,系所在校去 取值範圍只能在南湖校區和渾南校區 create table xi xi no varchar2 10 primary key,xi name varchar2 10 ...

第十四章 集合

1.集合 把個數不定的物件一起帶著走 集合是乙個存放任意數量的引用的物件的容器 多個物件放在另乙個物件中,此物件可成為乙個集合物件 注意 如果集合物件建立時不指定泛型,則在當前集合中可以存放任意型別的物件 包括 collection list set map list 介面的實現類有arraylis...