摘要:原文鏈接譯文原鏈譯我最喜歡的設計模式我最喜歡的設計模式我覺得聊一下我愛用的設計模式應該很有意思。我是一步一步才定下來的,經過一段時間從各種來源吸收和適應直到達到一個能提供我所需的靈活性的模式。
我最喜歡的 JavaScript 設計模式原文鏈接:My Favorite JavaScript Design Pattern
譯文原鏈:【譯】我最喜歡的 JavaScript 設計模式
我覺得聊一下我愛用的 JavaScript 設計模式應該很有意思。我是一步一步才定下來的,經過一段時間從各種來源吸收和適應直到達到一個能提供我所需的靈活性的模式。
讓我給你看看概覽,然后再來看它是怎么形成的:
function MyScript(){} (function() { var THIS = this; function defined(x) { return typeof x != "undefined"; } this.ready = false; this.init = function( { this.ready = true; }; this.doSomething = function() { }; var options = { x : 123, y : "abc" }; this.define = function(key, value) { if(defined(options[key])) { options[key] = value; } }; }).apply(MyScript);
如你在實例代碼中看到的,整體框架是一個函數直接量(function literal):
(function() { ... })();
函數直接量基本上就是一個自執行域,相當于定義一個有名的函數然后立即調用它:
function doSomething() { ... } doSomething();
我最初開始使用函數直接量是為了封裝——任何格式的任何腳本都可以被封裝在那個閉包里,并且它有效地將它密封在私有域中,從而保護它不會與同一個域里的其它腳本或者數據沖突。在最后面的那一對括號就是在執行這個域,就像其它函數一樣調用它。
但是如果,這個域通過使用 Function.apply 來執行而不是全局調用,這可以讓它在一個可被外界引用的特定命名的域中執行。
因此通過結合二者——創建一個命名函數,然后在這個命名函數的域內執行一個函數直接量——我們就得到了一個一次性的可以構成任何腳本的基礎的對象,它模擬了類似面向對象類的繼承性質。
內在之美看看第一個代碼示例,你就能看到封閉域結構提供了什么樣的靈活性。當然,這些你都可以在任何方法中做到,但是通過用這種方式包裝起來,我們就有了一個可以和任何命名域聯系起來的結構體。
我們可以創建多個這樣的結構體,然后將它們和同一個域聯系起來,這樣它們之間全部可以共享它們的公開數據。
不過在共享公開數據的同事,每一個(結構體)也可以定義它自己的私有數據。下面是一個例子,在腳本的最上面:
var THIS = this;
我們創建了一個叫做 THIS 的私有變量,它指向這個函數域,并且可以在私有方法中使用——和用 self = this 來創建內部域是一樣的招數。
通過同樣方式聲明的其他私有變量,如果他們定義常量數據的話,可以使用大寫傳統(不過用 const 而不是 var 來做聲明的方式應該被避免,因為對它的支持不是很好)。
私有方法可以用來提供內部功能:
function defined(x) { return typeof x != "undefined"; }
然后我們可以創建其他實例或者外界可以訪問的公開方法和屬性:
this.ready = false; this.init = function() { this.ready = true; }; this.doSomething = function() { };
我們也可以創建特殊的值——私有但是可以公開定義,在這個例子中是通過公開的 define 方法;它的參數可以根據數據需要再進行驗證:
var options = { x : 123, y : "abc" }; this.define = function(key, value) { if(defined(options[key])) { options[key] = value; } };封裝起來!
所有的這些特點讓這個結構體對我非常有用。并且它封裝在一個整潔、自我執行的單例中——一個容易引用、整合和使用的一次性對象。
所以你怎么想?這個模式眼熟嗎,或者你有什么其他喜歡用的?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79859.html
摘要:任天堂的最新游戲的控制臺帶有一個輝煌的動畫,他所有的商業廣告和這個示例都由創建。使用重新構建任天堂開關,同時使用動畫化整個事物。 現在構建一個HTML和CSS的動畫logo比以前容易多了,配合更新的JavaScript庫可以進一步推動網絡動畫的發展。 看看這個畫廊的10個令人難以置信的自定義動畫logo,它們展示的是一些未知的實體或者世界知名品牌。 1、Flowers SVG Web...
摘要:原文鏈接前端圈快速發展的今天,我們習慣于去嘗試最新的技術并在互聯網上討論它們的優劣。整理了一系列年值得學習的部分。在這兒,我特別推薦以下的課程所著的五本對我最有意義的編程書你喜歡我的推薦嗎你想在年學點什么 原文鏈接 前端圈快速發展的今天,我們習慣于去嘗試最新的技術并在互聯網上討論它們的優劣。我并不是說我們不應該這么做,我只是覺得我們是不是應該慢下來,看看那些不常變的東西:它們能夠很好的...
閱讀 1273·2023-04-25 23:22
閱讀 1673·2023-04-25 20:04
閱讀 2648·2021-11-22 15:24
閱讀 2806·2021-11-11 16:54
閱讀 1887·2019-08-30 14:03
閱讀 1484·2019-08-29 16:35
閱讀 1706·2019-08-26 10:29
閱讀 2661·2019-08-23 18:01