成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

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

Scliang / 1745人閱讀

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

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

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

面向?qū)ο罄锩嫦虻囊馑际且?..為主,面向?qū)ο缶幊碳纫詫?duì)象為主的編程.

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

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

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

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

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

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

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

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

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

五個(gè)falsy值
0 NaN null undefined ""

在javascript中,a||b c&&d的返回值只會(huì)在abcd中選一個(gè)!

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

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

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

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

而||和&&相反

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

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

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

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

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

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

在幾個(gè)模塊化文件里,都有MVC


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

封裝 Model View Controller

首先建三個(gè)封裝的文件,再引入

View():

Model():

原先的model:

封裝后Model():

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

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

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

View,Model封裝后的完整代碼

Controller():

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

封裝后的所有MVC代碼

總結(jié)

密愛(ài)想對(duì)象封裝后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ǎn)單了不少.


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

其他:對(duì)象的方法

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

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

在JavaScript中方法通常是一個(gè)綁定到對(duì)象中的普通函數(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ù)的過(guò)程中,this的值取決于我們怎么樣調(diào)用函數(shù). 在通常情況下,我們通過(guò)一個(gè)表達(dá)式person1.sayHello()來(lái)調(diào)用函數(shù):即從一個(gè)對(duì)象的屬性中得到所調(diào)用的函數(shù)。此時(shí)this被設(shè)置為我們?nèi)〉煤瘮?shù)的對(duì)象(即person1)。這就是為什么person1.sayHello() 使用了姓名“Alice”而person2.sayHello()使用了姓名“bob”的原因。

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/108390.html

相關(guān)文章

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

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

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

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

    mylxsw 評(píng)論0 收藏0
  • MVC && MVVM

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

    klinson 評(píng)論0 收藏0
  • 前端基本功-常見(jiàn)概念()

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

    bladefury 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<