摘要:私有變量任何在函數(shù)中定義的變量,都可以認(rèn)為是私有變量,因?yàn)樵诓荒茉俸瘮?shù)的外部訪問這些變量。我們把有權(quán)訪問私有變量和私有函數(shù)的公有方法稱為特權(quán)方法。模塊模式模塊模式是為單例創(chuàng)建私有變量和特權(quán)方法。
私有變量
任何在函數(shù)中定義的變量,都可以認(rèn)為是私有變量,因?yàn)樵诓荒茉俸瘮?shù)的外部訪問這些變量。私有變量包括函數(shù)的參數(shù)、函數(shù)中定義的變量和函數(shù)。我們把有權(quán)訪問私有變量和私有函數(shù)的公有方法稱為特權(quán)方法。
function MyObject(number){ // 私有變量和私有函數(shù),number也是私有變量 var privateVariable = 10 function privateFunction(){ return false } // 特權(quán)方法 this.publicMethod = function(){ number++ privateVariable++ return privateFunction() } } var myobject = new MyObject()
在創(chuàng)建MyObject的實(shí)例后,除了使用publicMethod這一個(gè)途徑外,沒有任何辦法可以直接訪問privateVariable和privateFunction以及number,利用私有和特權(quán)成員,可以隱藏哪些不應(yīng)該被直接修改的數(shù)據(jù)。
靜態(tài)私有變量(function(){ var name = "" var privateVariable = 10 function privateFunction(){ return false } // 沒有在聲明Person時(shí)使用var關(guān)鍵字,則會(huì)創(chuàng)建一個(gè)全局變量 Person = function(value){ name = value } Person.prototype.getName = function(){ return name } Person.prototype.setName = function(value){ name = value } })() var person1 = new Person("Nicholas") alert(person1.getName()) // "Nicholas" person1.setName("Greg") alert(person1.getName()) // "Greg" var person2 = new Person("Michael") alert(person1.getName()) // "Michael" // 私有變量和私有函數(shù)是由所有實(shí)例共享的 alert(person2.getName()) // "Michael"
這個(gè)模式與在構(gòu)造函數(shù)中定義特權(quán)方法的主要區(qū)別,就在于私有變量和私有函數(shù)是由所有實(shí)例共享的。由于特權(quán)方法是在原型上定義的,因此所有實(shí)例都使用同一個(gè)特權(quán)方法。而這個(gè)特權(quán)方法,作為一個(gè)閉包,總是保存著對包含作用域的引用。
模塊模式模塊模式(module pattern)是為單例創(chuàng)建私有變量和特權(quán)方法。所謂單例,指的就是只有一個(gè)實(shí)例的對象。按照慣例,使用對象字面量的方式來創(chuàng)建單例對象.
var module = function(){ var privateVariable = 10 function privateFunction(){ return false } return { publicProperty: true, publicMethod: function(){ privateVariable++ return privateFunction() } } }
如果必須創(chuàng)建一個(gè)對象并以某些數(shù)據(jù)進(jìn)行初始化,同時(shí)還要公開一些能夠訪問這些私有數(shù)據(jù)的方法,那么就可以使用模塊模式。
var application = function(){ var components = new Array() components.push(new BaseComponent()) return { getComponentCount: function(){ return components.length }, registerComponent: function(component){ if(typeof component === "object"){ components.push(component) } } } }()增強(qiáng)的模塊模式
增強(qiáng)的模塊模式適合那些單例必須是某種類型的實(shí)例,同時(shí)還必須添加某些屬性和方法對其加以增強(qiáng)的情況.
var application = function(){ var components = new Array() components.push(new BaseComponent()) // 單例必須是某種類型的實(shí)例 var app = new ComponentList() app.getComponentCount = function(){ return components.length } app.registerComponent = function(component){ if(typeof component === "object"){ components.push(component) } } return app }()
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/83382.html
摘要:這種方法也存在這樣的問題如果修改了構(gòu)造函數(shù)的原型對象,之前創(chuàng)建的對象無法通過這種方式來確定類型修改構(gòu)造函數(shù)的原型對象會(huì)導(dǎo)致之前創(chuàng)建的對象無法通過這種方式判斷類型判斷對象繼承自哪些父類型使用使用 判斷對象類型的方法 使用原型對象上的constructor屬性來判斷 每個(gè)對象的原型上都有一個(gè)constructor屬性,指向了其構(gòu)造函數(shù) 注意:對象沒有constructor屬性(除非自己添加...
摘要:繼承原型鏈原型鏈?zhǔn)菍?shí)現(xiàn)繼承的主要方法。臨時(shí)的構(gòu)造函數(shù)將傳入的對象作為這個(gè)構(gòu)造函數(shù)的原型返回新實(shí)例以為原型創(chuàng)建一個(gè)新實(shí)例不僅屬于所有,而且也會(huì)被共享。上訴例子只調(diào)用了一次構(gòu)造函數(shù),因此避免了在上面創(chuàng)建不必要的多余的屬性。 繼承 1 原型鏈 原型鏈?zhǔn)菍?shí)現(xiàn)繼承的主要方法。其基本思想是利用原型讓一個(gè)引用類型繼承另一個(gè)引用類型的屬性和方法。 構(gòu)造函數(shù)、原型和實(shí)例的關(guān)系 每個(gè)構(gòu)造函數(shù)都有一個(gè)原型對...
摘要:原型對象的問題省略了為構(gòu)造函數(shù)傳遞參數(shù),導(dǎo)致了所有實(shí)例在默認(rèn)情況下都取得相同的屬性值。即使有其他代碼會(huì)給這個(gè)對象添加方法或數(shù)據(jù)成員,但也不可能有別的方法訪問傳入到構(gòu)造函數(shù)中的原始數(shù)據(jù)。 創(chuàng)建對象 1.Object構(gòu)造函數(shù) 創(chuàng)建一個(gè)Object的實(shí)例,然為其添加屬性和方法(早期創(chuàng)建對象的模式) var person = new Object(); person.name = Nichol...
摘要:首先導(dǎo)包依賴如下構(gòu)建應(yīng)用是以為中心的實(shí)例可以通過獲得其中是工廠接口任務(wù)用于創(chuàng)建配置文件將會(huì)解析配置文件在類對象中配置獲取數(shù)據(jù)源事務(wù)管理器映射器在文件下新建文件配置文件內(nèi)容如下定義別名定義數(shù)據(jù)庫信息事物管理 首先導(dǎo)包 依賴如下 mysql mysql-connector-java 8.0.15 org.m...
摘要:顯示層控制層數(shù)據(jù)層統(tǒng)一交給或者處理處理流程客戶端發(fā)送到執(zhí)行讀取返回返回給在返回給在給客戶端問題代碼雜亂即方式客戶端發(fā)送到然后執(zhí)行用于讀取控制器獲取到讀取的數(shù)據(jù)以后再次返回給生成文件給客戶端分為顯示層控制層模型層屬于提供的分布式組件服務(wù)分 Model1 顯示層,控制層,數(shù)據(jù)層,統(tǒng)一交給jsp或者javabean處理. 處理流程 客戶端發(fā)送request 到 jsp jsp 執(zhí)行java...
閱讀 963·2021-11-24 09:39
閱讀 2696·2021-09-26 09:55
閱讀 14349·2021-08-23 09:47
閱讀 3583·2019-08-30 15:52
閱讀 855·2019-08-29 13:49
閱讀 1005·2019-08-23 18:00
閱讀 852·2019-08-23 16:42
閱讀 1646·2019-08-23 14:28