Object.definePropertyはじめに- LET OBJ = {}; Object.defineProperty(OBJ、 '学校'は、{ コンは:trueに、// 属性を削除することができます // trueに、//プロパティを変更することができます:書き込み可能 :列挙をtrueに、// プロパティを列挙することができる @ 値: 'zfpx'、//プロパティ値の設定 セット:関数(値){ にconsole.log(値); // 時間obj.school割り当て、コールセット()メソッドを } GET:関数(){ リターン 'zfpx'; // 値がobj.school、get()メソッドを呼び出して取得します } })
<!DOCTYPE HTML> <HTML LANG = "EN"> <HEAD> <METAのcharset = "UTF-8"> <タイトル>ドキュメント</ TITLE> </ HEAD> <SCRIPT SRC =「HTTPS://cdn.jsdelivr .NET / NPM / VUE / DIST / vue.js "> </ SCRIPT> <body> <DIV ID ="アプリケーション「> <P> {} {} AA </ P> <DIV> {B} {} < DIV> {{B}} </ div> </ div> </ div> </ body> <! - MVVM双方向データバインディング VUEデータハイジャック + モデルをサブスクライブ・パブリッシュは、 以前のバージョンObject.definePropertyと互換性がありません > - <スクリプト> (機能(ウィンドウ、 文書){ 関数 ZF(オプション= {}){ この。=は$オプションオプションを; // すべての属性はオプションで$ MOUNT データ=ましょうこの ._data = この$のoptions.data ;. この; .observe(データ) のために(せキーでデータ){ // 属性によって定義されたObject.defineProperty属性データ // データエージェント // このエージェントthis._data Object.defineProperty(本、キー、{ 可算:trueに、// 列挙 GET:機能(){ 返す この._dataを[キー]。 }、 SET:関数(newValに){ // の時間値を変更 この ._data [キー] = newValにする; } }); } この .Compile(options.el、この); } // コンパイラ ZF.prototype.Compile = 関数(EL、VM){ VM $ EL。 = document.querySelector(EL)は、 断片せ = document.createDocumentFragment(); ながら(子= $ el.firstChild VM){ // メモリにコンテンツアプリ意志 fragment.appendChild(子)。 } // 循环每一层 Array.from(fragment.childNodes).forEach(関数(ノード){ テキストせ = node.textContent; REGせ = /\{\{(.*)\}\}/ ; 場合( (テキスト)){reg.test ARRましょう。$ 1.split =正規表現( '' ); ヴァルせ = VM; にconsole.log(node.childNodes) にconsole.log(ARR) arr.forEach(関数(K){ ヴァル =ヴァル[K]; }) // あるいは node.textContent = text.replace(/\{\{(.*)\}\}/ 、ヴァル) } // node.textContent.textContent(12)である }) VM。 el.appendChild $(断片); } // ;オブジェクトに観察対象がObjectDefineProperty増加 ZF.prototype.observe = 関数(データ){ // はconsole.log(データ) を返す 新しい新しい観察(データ); } 関数観察する(データ) { のため(LETキーでデータ){ //属性データは、プロパティObject.definePropertyの方法によって定義される せヴァル= データ[キー]; // 再帰 IF(typeof演算「オブジェクト」===ヴァル{) 観察(ヴァル); } Object.defineProperty(データ、キー、{ 列挙:trueに、// 列挙 :GET 関数(){ リターン;ヴァル 、} // ハイジャックデータ :SETの関数(newValに){ // 変更時間値 であれば(newValに=== ヴァル){ 返します。 } 場合(typeof演算 newValに=== 'オブジェクト' ){ (newValに)を確認し、 } ヴァル = newValに。// } })。 } } window.ZF = ZF。 })(ウィンドウ、ドキュメント)。 せZFは = 新しいZFを({ EL: "#app" 、 データ:{:{: '是'}、B: '是B' }、 }) </スクリプト> </ HTML>