TypeScript 對象
對象是包含一組鍵值對的范例。 值可以是標(biāo)量、函數(shù)、數(shù)組、對象等,如下范例:
var object_name = { key1: "value1", // 標(biāo)量 key2: "value", key3: function() { // 函數(shù) }, key4:["content1", "content2"] //集合 }
以上對象包含了標(biāo)量,函數(shù),集合(數(shù)組或元組)。
1. 對象范例
var sites = { site1:"Codebaoku", site2:"Google" }; // 訪問對象的值 console.log(sites.site1) console.log(sites.site2)
編譯以上代碼,得到以下 JavaScript 代碼:
var sites = { site1:"Codebaoku", site2:"Google" }; // 訪問對象的值 console.log(sites.site1) console.log(sites.site2)
輸出結(jié)果為:
Codebaoku Google
2. TypeScript 類型模板
假如我們在 JavaScript 定義了一個(gè)對象:
var sites = { site1:"Codebaoku", site2:"Google" };
這時(shí)如果我們想在對象中添加方法,可以做以下修改:
sites.sayHello = function(){ return "hello";}
如果在 TypeScript 中使用以上方式則會(huì)出現(xiàn)編譯錯(cuò)誤,因?yàn)門ypescript 中的對象必須是特定類型的范例。
var sites = { site1: "Codebaoku", site2: "Google", sayHello: function () { } // 類型模板 }; sites.sayHello = function () { console.log("hello " + sites.site1); }; sites.sayHello();
編譯以上代碼,得到以下 JavaScript 代碼:
var sites = { site1: "Codebaoku", site2: "Google", sayHello: function () { } // 類型模板 }; sites.sayHello = function () { console.log("hello " + sites.site1); }; sites.sayHello();
輸出結(jié)果為:
hello Codebaoku
此外對象也可以作為一個(gè)參數(shù)傳遞給函數(shù),如下范例:
var sites = { site1:"Codebaoku", site2:"Google", }; var invokesites = function(obj: { site1:string, site2 :string }) { console.log("site1 :"+obj.site1) console.log("site2 :"+obj.site2) } invokesites(sites)
編譯以上代碼,得到以下 JavaScript 代碼:
var sites = { site1: "Codebaoku", site2: "Google" }; var invokesites = function (obj) { console.log("site1 :" + obj.site1); console.log("site2 :" + obj.site2); }; invokesites(sites);
輸出結(jié)果為:
site1 :Codebaoku site2 :Google
3. Duck 類型(Duck Typing)
Duck 類型是動(dòng)態(tài)類型的一種風(fēng)格,是多態(tài)(polymorphism)的一種形式。
在這種風(fēng)格中,一個(gè)對象有效的語義,不是由繼承自特定的類或?qū)崿F(xiàn)特定的接口,而是由"當(dāng)前方法和屬性的集合"決定。
在Duck類型中,關(guān)注點(diǎn)在于對象的行為,能作什么;而不是關(guān)注對象所屬的類型。例如,在不使用Duck類型的語言中,我們可以編寫一個(gè)函數(shù),它接受一個(gè)類型為"Duck"的對象,并調(diào)用它的"走"和"叫"方法。在使用 Duck 類型的語言中,這樣的一個(gè)函數(shù)可以接受一個(gè)任意類型的對象,并調(diào)用它的"走"和"叫"方法。如果這些需要被調(diào)用的方法不存在,那么將引發(fā)一個(gè)運(yùn)行時(shí)錯(cuò)誤。任何擁有這樣的正確的"走"和"叫"方法的對象都可被函數(shù)接受的這種行為引出了以上表述,這種決定類型的方式因此得名。
interface IPoint { x:number y:number } function addPoints(p1:IPoint,p2:IPoint):IPoint { var x = p1.x + p2.x var y = p1.y + p2.y return {x:x,y:y} } // 正確 var newPoint = addPoints({x:3,y:4},{x:5,y:1}) // 錯(cuò)誤 var newPoint2 = addPoints({x:1},{x:4,y:3})
- 如何導(dǎo)入javaScript文件
- JavaScript如何對負(fù)數(shù)開方
- javascript報(bào)錯(cuò)如何調(diào)試
- javascript中如何完成全選
- JavaScript不能獲取表單如何解決
- javascript怎么實(shí)現(xiàn)登錄界面成功跳轉(zhuǎn)
- javascript如何輸出當(dāng)前時(shí)間
- javascript標(biāo)簽的下拉框如何定位
- vscode如何編寫javascript
- javascript中怎么嵌套php腳本
- javascript怎么設(shè)置三色燈
- javascript怎么發(fā)送ajax請求參數(shù)
- javascript如何設(shè)置文本框
- TypeScript 數(shù)據(jù)類型
- TypeScript 循環(huán)
- TypeScript 函數(shù)
- TypeScript Number
- TypeScript Map 對象
- TypeScript 接口
- TypeScript 模塊