一个对象是包含一组键值对集合的实例。值可以是标量值或函数,甚至是其他对象的数组。语法如下所示:
var object_name = { key1: “value1”, //scalar value key2: “value”, key3: function() { //functions }, key4:[“content1”, “content2”] //collection };
如上所示,一个对象可以包含标量值,函数和结构(如数组和元组)。
var person = { firstname:"Tom", lastname:"Hanks" }; //access the object values console.log(person.firstname) console.log(person.lastname)
在编译时,它会在JavaScript中生成相同的代码。
上面的代码的输出如下:
Tom Hanks
比方说,你在JavaScript中创建了一个对象文本:
var person = { firstname:"Tom", lastname:"Hanks" };
如果您想为对象添加一些值,JavaScript允许你进行必要的修改。假设我们需要在person对象中添加一个函数,你可以使用以下的方法。
person.sayHello = function(){ return "hello";}
如果在TypeScript中使用相同的代码,编译器会给出错误。这是因为在TypeScript中,具体对象应具有类型模板。TypeScript中的对象必须是一个特定类型的实例。
您可以通过在声明中使用方法模板来解决这个问题。
var person = { firstName:"Tom", lastName:"Hanks", sayHello:function() { } //Type template } person.sayHello = function() { console.log("hello "+person.firstName) } person.sayHello()
在编译时,它会在JavaScript中生成相同的代码。
上面的代码的输出如下:
hello Tom
对象也可以作为参数传递给函数。
var person = { firstname:"Tom", lastname:"Hanks" }; var invokeperson = function(obj: { firstname:string, lastname :string }) { console.log("first name :"+obj.firstname) console.log("last name :"+obj.lastname) } invokeperson(person)
本示例声明了一个对象文本。函数表达式是通过传递person对象来调用的。
在编译时,它会生成以下JavaScript代码:
//Generated by typescript 1.8.10 var person = { firstname: "Tom", lastname: "Hanks" }; var invokeperson = function (obj) { console.log("first name :" + obj.firstname); console.log("last name :" + obj.lastname); }; invokeperson(person);
它的输出如下:
first name :Tom last name :Hanks
您可以动态创建并传递一个匿名对象。
var invokeperson = function(obj:{ firstname:string, lastname :string}) { console.log("first name :"+obj.firstname) console.log("last name :"+obj.lastname) } invokeperson({firstname:"Sachin",lastname:"Tendulkar"});
在编译时,它会生成以下JavaScript代码:
//Generated by typescript 1.8.10 var invokeperson = function (obj) { console.log("first name :" + obj.firstname); console.log("last name :" + obj.lastname); }; invokeperson({ firstname: "Sachin", lastname: "Tendulkar" }); invokeperson({ firstname: "Sachin", lastname: "Tendulkar" });
它的输出如下:
first name :Sachin last name :Tendulkar
在鸭子类型(duck-typing)中,如果两个对象共享同一组属性,则认为它们属于同一类型。鸭子类型验证对象中某些属性的存在,而不是它们的实际类型,以检查它们的适用性。这个概念一般是可以由以下短语解释:
“当我看到一只像鸭子一样散步,像鸭子一样游动,像鸭子一样呱呱叫的鸟儿时,我称这只鸟为鸭子。”
TypeScript编译器实现鸭子类型系统,允许动态创建对象,同时保持类型安全。以下示例显示了如何传递未显式实现接口但包含函数所需的所有成员的对象。
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} } //Valid var newPoint = addPoints({x:3,y:4},{x:5,y:1}) //Error var newPoint2 = addPoints({x:1},{x:4,y:3})
let和const是JavaScript里相对较新的变量声明方式。 像我们之前提到过的,let在很多方面与var是相似的,但是可以帮助大家避免在J...
在 Ruby 中使用 JSON本教程将会教我们如何使用 Ruby 编程语言编码和解码 JSON。让我们先来准备环境以便针对 JSON 进行 Ruby 编程...
什么是跨域?简单的来说,出于安全方面的考虑,页面中的JavaScript无法访问其他服务器上的数据,即“同源策略”。而跨域就是通过...
JavaScript 数组对象实例返回数组的数目:array.lengthvar cars = ["Saab", "Volvo", "BMW"];//定义一个数组console.log(car...
HTML DOM 属性 对象HTML DOM 节点在 HTML DOM (Document Object Model) 中, 所有的都是节点:文档是文档节点所有 HTML 元素是元...