对象其实就是一种封装的概念,它把事物封装成一个类,然后提供类的接口,而具体的过程人们是看不到的。


一、对象实例

二、TypeScript 类型模板

三、鸭子类型(Duck Typing)


对象是包含一组键值对的实例。 值可以是标量、函数、数组、对象等,如下实例:

var object_name = { key1: "value1", // 标量key2: "value",  key3: function() {// 函数}, key4:["content1", "content2"] //集合
}

以上对象包含了标量,函数,集合(数组或元组)。

一、对象实例

var sites = { site1:"Runoob", site2:"Google"
};
// 访问对象的值
console.log(sites.site1)
console.log(sites.site2)

编译以上代码,得到以下 JavaScript 代码:

var sites = { site1:"Runoob", site2:"Google"
};
// 访问对象的值
console.log(sites.site1)
console.log(sites.site2)

输出结果为:

Runoob

Google

二、TypeScript 类型模板

假如我们在 JavaScript 定义了一个对象:

var sites = { site1:"Runoob", site2:"Google"
};

这时如果我们想在对象中添加方法,可以做以下修改:

sites.sayHello = function(){ return "hello";}

如果在 TypeScript 中使用以上方式则会出现编译错误,因为Typescript 中的对象必须是特定类型的实例。

var sites = {site1: "Runoob",site2: "Google",sayHello: function () { } // 类型模板
};
sites.sayHello = function () {console.log("hello " + sites.site1);
};
sites.sayHello();

编译以上代码,得到以下 JavaScript 代码:

var sites = {site1: "Runoob",site2: "Google",sayHello: function () { } // 类型模板
};
sites.sayHello = function () {console.log("hello " + sites.site1);
};
sites.sayHello();

输出结果为:

hello Runoob

此外对象也可以作为一个参数传递给函数,如下实例:

var sites = { site1:"Runoob", 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: "Runoob",site2: "Google"
};
var invokesites = function (obj) {console.log("site1 :" + obj.site1);console.log("site2 :" + obj.site2);
};
invokesites(sites);

输出结果为:

site1 :Runoob

site2 :Google

三、鸭子类型(Duck Typing)

鸭子类型(英语:duck typing)是动态类型的一种风格,是多态(polymorphism)的一种形式。

在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定。

可以这样表述:

"当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。"

在鸭子类型中,关注点在于对象的行为能做什么,而不是关注对象所属的类型。例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为"鸭子"的对象,并调用它的"走"和"叫"方法。在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的"走"和"叫"方法。如果这些需要被调用的方法不存在,那么将引发一个运行时错误。任何拥有这样的正确的"走"和"叫"方法的对象都可被函数接受的这种行为引出了以上表述,这种决定类型的方式因此得名。

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})  // 错误
var newPoint2 = addPoints({x:1},{x:4,y:3})

【TypeScript入门】TypeScript入门篇——对象相关推荐

  1. TypeScript超详细入门教程(上)

    TypeScript超详细入门教程(上) 01 开篇词:Hello~TypeScript 01 开篇词:Hello~TypeScript 更新时间:2019-10-30 13:49:46 既然我已经踏 ...

  2. LAYA和TypeScript制作H5入门——页面制作

    上一篇: LAYA和TypeScript制作H5入门--准备工作 一般情况下,一个H5是由多个相互关联的ui页面串联组成.遵循的大致逻辑一般是加载页面,开始页面,内容页面和结束页面.这些界面承担了用户 ...

  3. 用TypeScript来写React官方入门教程 .tsx后缀文件,同时入门typescript和React

    用TypeScript来写React官方入门教程 .tsx后缀文件,同时入门typescript和React 1. 项目说明: 这是React官网上那个下井字棋的入门教程,但是我把它换了typesci ...

  4. React入门看这篇就够了

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所 ...

  5. Java快速入门-01-基础篇

    Java快速入门-01-基础篇 如果基础不好或者想学的很细,请参看:菜鸟教程-JAVA 本笔记适合快速学习,文章后面也会包含一些常见面试问题,记住快捷键操作,一些内容我就不转载了,直接附上链接,嘻嘻 ...

  6. .NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了

    写在前面 上篇文章我们讲了如在在实际项目开发中使用Git来进行代码的版本控制,当然介绍的都是比较常用的功能.今天我再带着大家一起熟悉下一个ORM框架Dapper,实例代码的演示编写完成后我会通过Git ...

  7. Spring Cloud 入门 之 Zuul 篇(五)

    一.前言 随着业务的扩展,微服务会不对增加,相应的其对外开放的 API 接口也势必增多,这不利于前端的调用以及不同场景下数据的返回,因此,我们通常都需要设计一个 API 网关作为一个统一的 API 入 ...

  8. Spring Cloud 入门 之 Feign 篇(三)

    一.前言 在上一篇文章<Spring Cloud 入门 之 Ribbon 篇(二)> 中介绍了 Ribbon 使用负载均衡调用微服务,但存在一个问题:消费端每个请求方法中都需要拼接请求服务 ...

  9. Spring Cloud 入门 之 Ribbon 篇(二)

    一.前言 上一篇<Spring Cloud 入门 之 Eureka 篇(一)> 介绍了微服务的搭建,服务注册与发现.但在文章中留了一个小尾巴--如何正确使用 Eureka 进行服务发现并调 ...

  10. redis入门——Spring整合篇

    redis入门--Spring整合篇 @(Redis)[服务器, 连接池, 集群, jedis, spring] redis入门Spring整合篇 Spring整合Redis redis整合分析 编写 ...

最新文章

  1. ubuntu安装五笔输入法(ibus-table-wubi)
  2. 文本编辑器添加文本编辑区
  3. jquery 手指滑动多半屏_JS拖拽专题(五)——「玩出花儿来」移动端滑动事件的封装...
  4. 基于Swoole开发PHP扩展
  5. .NET 6 新特性 WaitAsync
  6. Cass2008 for CAD2006 安装
  7. Python_自定义关键字的使用
  8. 技术干货 | 基于MindSpore更好的理解Focal Loss
  9. 打车应用上马快递业务靠谱吗?
  10. Codeforces 1043F(容斥+dp)
  11. Ubuntu下打开windows的txt文件乱码解决
  12. 为什么要避免大事务以及大事务如何解决?
  13. 联想服务器查看运行状态,服务器硬件批量监控工具
  14. 印刷质量缺陷的视觉检测原理概述
  15. 解决实现虚拟机win10与主机文件的共享问题
  16. 自定义Android Switch控件
  17. 路由器、DDNS、花生壳
  18. echarts实现3D地球模式--3D线和标记mark
  19. 2020 年的风口是什么?
  20. qq空间把android改成iphone,装逼时代 教你如何修改QQ微信小尾巴为来自iphone6

热门文章

  1. torch_geometric.data.collate中collate()函数
  2. 人工智能数学课高等数学线性微积分数学教程笔记(3. 线性代数基础)
  3. 健身房管理系统模块功能流程图一
  4. 系统集成项目管理工程师需要考论文吗?
  5. ROBOGUIDE软件:机器人仿真视频导出功能介绍与使用方法
  6. OpenCV车辆追踪学习笔记
  7. CC3200 调试记录——XDCtools版本导致的编译不过
  8. 解密muji无印良品读后感
  9. 腾讯云linux没有root,解决腾讯云服务器默认为ubuntu用户问题
  10. shiro权限管理的框架、加密、授权