亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JS面向?qū)ο笠?MVC的面向?qū)ο蠓庋b

Scliang / 1744人閱讀

摘要:自己的理解的第一個參數(shù)就是的值如果沒用默認(rèn)是那個調(diào)用函數(shù)的當(dāng)前的對象在全局作用域中就是被隱藏的所以不寫且在全局作用于調(diào)用函數(shù)的時候就是可以使用或者自己指定的指向

JS面向?qū)ο笠?MVC的面向?qū)ο蠓庋b

MDNjavascript面向?qū)ο?/p> 面向?qū)ο?Object-Oriented)

面向?qū)ο罄锩嫦虻囊馑际且?..為主,面向?qū)ο缶幊碳纫詫ο鬄橹鞯木幊?

面向?qū)ο蟮囊恍└拍?

Namespace 命名空間
允許開發(fā)人員在一個獨(dú)特, 應(yīng)用相關(guān)的名字的名稱下捆綁所有功能的容器。
Class 類
定義對象的特征。它是對象的屬性和方法的模板定義.
Object 對象
類的一個實(shí)例。
Property 屬性
對象的特征,比如顏色。
Method 方法
對象的能力,比如行走。
Constructor 構(gòu)造函數(shù)
對象初始化的瞬間, 被調(diào)用的方法. 通常它的名字與包含它的類一致.
例如Object(),String(),Number()
Inheritance 繼承
一個類可以繼承另一個類的特征。
Encapsulation 封裝
一種把數(shù)據(jù)和相關(guān)的方法綁定在一起使用的方法.
Abstraction 抽象
結(jié)合復(fù)雜的繼承,方法,屬性的對象能夠模擬現(xiàn)實(shí)的模型。
Polymorphism 多態(tài)
多意為‘許多’,態(tài)意為‘形態(tài)’。不同類可以定義相同的方法或?qū)傩浴?/p> 命名空間

// 全局命名空間
var MYAPP = MYAPP || {};

javascript命名空間
MYAPP包含了所有的命名,他就像一個房間一樣,裝著所有的屬性,所以就叫命名空間

// 給普通方法和屬性創(chuàng)建一個叫做MYAPP.commonMethod的容器
MYAPP.commonMethod = {
  regExForName: "", // 定義名字的正則驗(yàn)證
  regExForPhone: "", // 定義電話的正則驗(yàn)證
  validateName: function(name){
    // 對名字name做些操作,你可以通過使用“this.regExForname”
    // 訪問regExForName變量
  },
 
  validatePhoneNo: function(phoneNo){
    // 對電話號碼做操作
  }
}

// 對象和方法一起申明
MYAPP.event = {
    addListener: function(el, type, fn) {
    //  代碼
    },
   removeListener: function(el, type, fn) {
    // 代碼
   },
   getEvent: function(e) {
   // 代碼
   }
  
   // 還可以添加其他的屬性和方法
}

//使用addListener方法的寫法:
MYAPP.event.addListener("yourel", "type", callback);

解釋:
因?yàn)?/p>

1||2//返回1,不是true或者false!!!

五個falsy值
0 NaN null undefined ""

在javascript中,a||b c&&d的返回值只會在abcd中選一個!

阮一峰-且運(yùn)算符(&&)或運(yùn)算符(||)

且運(yùn)算符(&&)往往用于多個表達(dá)式的求值。
它的運(yùn)算規(guī)則是:如果第一個運(yùn)算子的布爾值為true,則返回第二個運(yùn)算子的值(注意是值,不是布爾值);如果第一個運(yùn)算子的布爾值為false,則直接返回第一個運(yùn)算子的值,且不再對第二個運(yùn)算子求值。

如果是一連串的&&,他的返回值就是遇到的第一個falsy值,后面的不看了

1 && 0 && console.log(3)//console.log(3)不會執(zhí)行,返回0
console.log(3)//返回undefined

而||和&&相反

返回第一個為真的值.后面的不看
那么:

var a = b || {}
意思就是如果b是存在的(b的返回值為true),那么a=b,如果b不存在,那么a={}

類(從MVC提煉面向?qū)ο笫鞘裁?

使用的代碼是
模塊化、MVC里的V和C、閉包與立即執(zhí)行函數(shù)的使用和MVC中的M(model)、MVC總結(jié)

接下來優(yōu)化老版本的message.js
箭頭函數(shù)內(nèi)外this相通

優(yōu)化前的結(jié)構(gòu):

在幾個模塊化文件里,都有MVC


那么我們可以吧每個js文件中的MVC寫成一個模板,這個模板就是
所謂模板,就是寫個函數(shù)把他造出來,那么我們來封裝MVC

封裝 Model View Controller

首先建三個封裝的文件,再引入

View():

Model():

原先的model:

封裝后Model():

并且save()傳入object
然后就可以用封裝后的Model()代碼了,修改message.js代碼為:

也就是說,封裝后我們的使用方法是:

如果有兩個model,不需要寫重復(fù)代碼

View,Model封裝后的完整代碼

Controller():

封裝Controller.js,但是沒有將封裝運(yùn)用,因?yàn)樽约旱暮啔v項(xiàng)目比較小,代碼結(jié)構(gòu)不復(fù)雜,封裝后反而會難理解,知道如何封裝和如何使用的思想就可以

封裝后的所有MVC代碼

總結(jié)

密愛想對象封裝后MVC的使用方法:
view:

/*
var view = View(".xxx")
*/

model:

/*
var model = Model({
  resourceName: "表名"
})
*/

controller:

/*
Controller({
  init:(){
    this.view
    this.model
    this.xxx()
    this.yyy()
  },
  xxx(){},
  yyy(){}
})
*/

簡單了不少.


總結(jié):
面向?qū)ο缶褪羌热贿@些對象有相同的屬性和相同的行為,那么就把相同的地方存到一個地方,當(dāng)做一個模板.這就叫
當(dāng)需要生成對象的時候,new一個對象出來,這個對象就有這個模板上的屬性和行為.這就叫實(shí)例化一個對象.
面向?qū)ο蟮暮诵木褪?strong>實(shí)例化一個對象

其他:對象的方法

以下引用自MDNjavascript面向?qū)ο?/p>

如果一個Object的的屬性是函數(shù),那么這個屬性叫方法

在JavaScript中方法通常是一個綁定到對象中的普通函數(shù), 這意味著方法可以在其所在context之外被調(diào)用。 思考下面示例中的代碼:

function Person(firstName) {
  this.firstName = firstName;
}


Person.prototype.sayHello = function() {
  alert("Hello, I"m " + this.firstName);
};

var person1 = new Person("Alice");
var person2 = new Person("Bob");
var helloFunction = person1.sayHello;

person1.sayHello();                                 // alerts "Hello, I"m Alice"
person2.sayHello();                                 // alerts "Hello, I"m Bob"
helloFunction();                                    // alerts "Hello, I"m undefined" (or fails
                                                    // with a TypeError in strict mode)
console.log(helloFunction === person1.sayHello);          // logs true
console.log(helloFunction === Person.prototype.sayHello); // logs true
helloFunction.call(person1);                        // logs "Hello, I"m Alice"
helloFunction.call(person2);                        // logs "Hello, I"m Bob"

如上例所示, 所有指向sayHello函數(shù)的引用 ,包括 person1, Person.prototype, 和 helloFunction 等, 均引用了相同的函數(shù).

console.log(helloFunction === person1.sayHello);          // logs true
console.log(helloFunction === Person.prototype.sayHello); // logs true

在調(diào)用函數(shù)的過程中,this的值取決于我們怎么樣調(diào)用函數(shù). 在通常情況下,我們通過一個表達(dá)式person1.sayHello()來調(diào)用函數(shù):即從一個對象的屬性中得到所調(diào)用的函數(shù)。此時this被設(shè)置為我們?nèi)〉煤瘮?shù)的對象(即person1)。這就是為什么person1.sayHello() 使用了姓名“Alice”而person2.sayHello()使用了姓名“bob”的原因。

然而我們使用不同的調(diào)用方法時, this的值也就不同了。當(dāng)從變量 helloFunction()中調(diào)用的時候, this就被設(shè)置成了全局對象 (在瀏覽器中即window)。由于該對象 (非常可能地) 沒有firstName 屬性, 我們得到的結(jié)果便是"Hello, I"m undefined". (這是松散模式下的結(jié)果, 在 嚴(yán)格模式中,結(jié)果將不同(此時會產(chǎn)生一個error)。 但是為了避免混淆,我們在這里不涉及細(xì)節(jié)) 。另外,我們可以像上例末尾那樣,使用Function#call (或者Function#apply)顯式的設(shè)置this的值。

自己的理解:call()的第一個參數(shù)就是this的值.如果沒用call,默認(rèn)this是那個調(diào)用函數(shù)的當(dāng)前的對象.在全局作用域中,就是被隱藏的window.所以不寫call()且在全局作用于調(diào)用函數(shù)的時候,this就是window.可以使用call()或者apply自己指定this的指向

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/108390.html

相關(guān)文章

  • 大前端2018現(xiàn)在上車還還得及么

    摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對象事件框架選擇框架。核心模塊和對象全局對象,,,事件驅(qū)動,事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶端。 第一階段: HTML+CSS:HTML進(jìn)階、CSS進(jìn)階、div+css布局、HTML+css整站開發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對...

    stormgens 評論0 收藏0
  • 大前端2018現(xiàn)在上車還還得及么

    摘要:面向?qū)ο笕筇卣骼^承性多態(tài)性封裝性接口。第五階段封裝一個屬于自己的框架框架封裝基礎(chǔ)事件流冒泡捕獲事件對象事件框架選擇框架。核心模塊和對象全局對象,,,事件驅(qū)動,事件發(fā)射器加密解密,路徑操作,序列化和反序列化文件流操作服務(wù)端與客戶端。 第一階段: HTML+CSS:HTML進(jìn)階、CSS進(jìn)階、div+css布局、HTML+css整站開發(fā)、 JavaScript基礎(chǔ):Js基礎(chǔ)教程、js內(nèi)置對...

    mylxsw 評論0 收藏0
  • MVC && MVVM

    摘要:面向?qū)ο笫亲约航M裝電腦,硬件已生產(chǎn)完畢。面向過程吃狗屎面向?qū)ο蠊烦允捍_切的講是一種軟件設(shè)計規(guī)范,早在年的理念就已經(jīng)誕生。后期的維護(hù)成本會減少很多。減輕了開發(fā)人員的負(fù)擔(dān),也減少了操作邏輯導(dǎo)致業(yè)務(wù)邏輯混亂的可能性。 什么是MVC,什么是MVVM? 面向過程 --> 面向?qū)ο?--> MVC --> MV* 面向過程: 開發(fā)人員按照需求邏輯順序開發(fā)代碼邏輯,主要思維模式在于如何實(shí)現(xiàn)。先細(xì)節(jié),...

    klinson 評論0 收藏0
  • 前端基本功-常見概念()

    摘要:前端基本功常見概念一點(diǎn)這里前端基本功常見概念二點(diǎn)這里前端基本功常見概念三點(diǎn)這里什么是原型鏈當(dāng)一個引用類型繼承另一個引用類型的屬性和方法時候就會產(chǎn)生一個原型鏈。函數(shù)式編程是聲明式而不是命令式,并且應(yīng)用程序狀態(tài)通過純函數(shù)流轉(zhuǎn)。 前端基本功-常見概念(一) 點(diǎn)這里前端基本功-常見概念(二) 點(diǎn)這里前端基本功-常見概念(三) 點(diǎn)這里 1.什么是原型鏈 當(dāng)一個引用類型繼承另一個引用類型的屬性和方...

    bladefury 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<