摘要:封裝常見的封裝類中的共有和私有執(zhí)行結(jié)果如下原因是調(diào)用的時(shí)候,指向的其實(shí)是,因此沒有輸出解決辦法更改指向工廠函數(shù)也有對(duì)于程序員來說這三個(gè)關(guān)鍵字應(yīng)該是很熟悉的哈,但是在中,并沒有類似于這樣的關(guān)鍵字,但是我們又希望我們定義的屬性和方法有一定的訪問
封裝
常見的封裝
function Person (name,age,sex){ this.name = name; this.age = age; this.sex = sex; } Pserson.prototype = { constructor:Person, sayHello:function(){ console.log("hello"); } }
類中的共有和私有
function Person(pname){ var age = 10; function pm(){ console.log(this.name) } this.name = pname; this.test: function(){ console.log("public methods"); pm(); } }
執(zhí)行結(jié)果如下:
(原因是 調(diào)用pm的時(shí)候,this指向的其實(shí)是window,因此沒有輸出)
解決辦法
function Person(pname){ var age = 10; function pm(){ console.log(this.name) } this.name = pname; this.test: function(){ console.log("public methods"); pm.call(this); // 【】更改this指向 // pm(); } }
工廠函數(shù)
function Person(name){ function pm(){ console.log(self.name); } var self = { name: name, test: function(){ pm(); } } return self; }javascript也有private public protected
對(duì)于java程序員來說private public protected這三個(gè)關(guān)鍵字應(yīng)該是很熟悉的哈,但是在js中,并沒有類似于private public protected這樣的關(guān)鍵字,但是我們又希望我們定義的屬性和方法有一定的訪問限制,于是我們就可以模擬private public protected這些訪問權(quán)限。
上栗子
var Book = function (id, name, price) { // private(在函數(shù)內(nèi)部定義,函數(shù)外部訪問不到,實(shí)例化之后實(shí)例化的對(duì)象訪問不到) var _num = 1; var _id = id; // 私有函數(shù) function _checkId(id) { console.log("private"); console.log(_id); // 這里只能訪問私有變量和方法, // 如果訪問this.name是訪問不到的, // 如果訪問需要重新指向this } // protected(可以訪問到函數(shù)內(nèi)部的私有屬性和私有方法,在實(shí)例化之后就可以對(duì)實(shí)例化的類進(jìn)行初始化拿到函數(shù)的私有屬性) this.getName = function () { _checkId(); console.log(this.name); } this.getPrice = function () { console.log(price); } // public this.name = name; this.copy = function () { console.log("this is public") console.log(this.name) console.log(price); } } //在Book的原型上添加的方法實(shí)例化之后可以被實(shí)例化對(duì)象繼承 Book.prototype.profunction = function () { console.log("this is profunction"); } //在函數(shù)外部通過.語法創(chuàng)建的屬性和方法,只能通過該類訪問,實(shí)例化對(duì)象訪問不到 Book.setTime = function () { console.log("this is new time") } var book1 = new Book(1, "zjj", 2000); console.log(book1); book1.getName(); // 111 getName是protected,可以訪問到類的私有屬性,所以實(shí)例化之后也可以訪問到函數(shù)的私有屬性 // book1._checkId(); //報(bào)錯(cuò)book1.checkId is not a function console.log(book1.id) // undefined id是在函數(shù)內(nèi)部通過定義的,是私有屬性,所以實(shí)例化對(duì)象訪問不到 console.log(book1.name) //name 是通過this創(chuàng)建的,所以在實(shí)例化的時(shí)候會(huì)在book1中復(fù)制一遍name屬性,所以可以訪問到 book1.copy() //this is public book1.profunction(); //this is proFunction Book.setTime(); //this is new time book1.setTime(); //報(bào)錯(cuò)book1.setTime is not a function
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/96818.html
摘要:導(dǎo)入模塊的代碼執(zhí)行后,實(shí)例化過的模塊被保存在內(nèi)存中,只要另一個(gè)語句引用它就可以重復(fù)使用它和的一個(gè)重要的限制是它們必須在其它語句和函數(shù)之外使用,也就是說不允許出現(xiàn)在語句中,不能有條件導(dǎo)出或以任何方式動(dòng)態(tài)導(dǎo)出。 什么是模塊 模塊是自動(dòng)運(yùn)行在嚴(yán)格模式下并且沒有辦法退出運(yùn)行的Javascript代碼 在模塊的頂部this的值是undefined 其模塊不支持html風(fēng)格的代碼注釋除非用def...
摘要:導(dǎo)入模塊的代碼執(zhí)行后,實(shí)例化過的模塊被保存在內(nèi)存中,只要另一個(gè)語句引用它就可以重復(fù)使用它和的一個(gè)重要的限制是它們必須在其它語句和函數(shù)之外使用,也就是說不允許出現(xiàn)在語句中,不能有條件導(dǎo)出或以任何方式動(dòng)態(tài)導(dǎo)出。 什么是模塊 模塊是自動(dòng)運(yùn)行在嚴(yán)格模式下并且沒有辦法退出運(yùn)行的Javascript代碼 在模塊的頂部this的值是undefined 其模塊不支持html風(fēng)格的代碼注釋除非用def...
摘要:模塊化是隨著前端技術(shù)的發(fā)展,前端代碼爆炸式增長(zhǎng)后,工程化所采取的必然措施。目前模塊化的思想分為和。特別指出,事件不等同于異步,回調(diào)也不等同于異步。將會(huì)討論安全的類型檢測(cè)惰性載入函數(shù)凍結(jié)對(duì)象定時(shí)器等話題。 Vue.js 前后端同構(gòu)方案之準(zhǔn)備篇——代碼優(yōu)化 目前 Vue.js 的火爆不亞于當(dāng)初的 React,本人對(duì)寫代碼有潔癖,代碼也是藝術(shù)。此篇是準(zhǔn)備篇,工欲善其事,必先利其器。我們先在代...
摘要:通常有這兩種繼承方式接口繼承和實(shí)現(xiàn)繼承。理解繼承的工作是通過調(diào)用函數(shù)實(shí)現(xiàn)的,所以是寄生,將繼承工作寄托給別人做,自己只是做增強(qiáng)工作。適用基于某個(gè)對(duì)象或某些信息來創(chuàng)建對(duì)象,而不考慮自定義類型和構(gòu)造函數(shù)。 一、繼承的概念 繼承,是面向?qū)ο笳Z言的一個(gè)重要概念。通常有這兩種繼承方式:接口繼承和實(shí)現(xiàn)繼承。接口繼承只繼承方法簽名,而實(shí)現(xiàn)繼承則繼承實(shí)際的方法。 《JS高程》里提到:由于函數(shù)沒有簽名,...
閱讀 850·2021-11-16 11:56
閱讀 1673·2021-11-16 11:45
閱讀 3120·2021-10-08 10:13
閱讀 4110·2021-09-22 15:27
閱讀 733·2019-08-30 11:03
閱讀 651·2019-08-30 10:56
閱讀 953·2019-08-29 15:18
閱讀 1747·2019-08-29 14:05