本节是第四讲的第十八小节,我们在前几节课为大家介绍了JavaScript对象,由于JavaScript对象概念比较重要,本节将为大家总结下对象的相关概念。
对象的基本概念
以下声明一个person对象:
var person = {
name : ['Bob', 'Smith'],
age:32,
gender: 'male',
greeting: function() {
alert('Hi! I\'m ' + this.name[0] + '.');
}
};
对象是一个包含相关数据和方法的集合(通常由一些变量和函数组成,我们称之为对象里面的属性和方法)。
点表示法(dot notation)来访问对象的属性和方法。对象的名字表现为一个命名空间(namespace),它必须写在第一位。例如:person.age
另外一种访问属性的方式是使用括号表示法(bracket notation),例如:person['age'],person['name'][0]。
使用构造函数创建对象
function Person(first, last,gender) {
this.name = {
'first': first, 'last': last
};
this.gender = gender;
this.greeting = function() {
};
}
let person1 = new Person('Bob', 'Smith', 'male');
如上所示,通过函数直接创建对象,里面的this指的是Person对象。使用Object()构造函数也可以创建对象,以下分别是Object创建对象的两种方法:
var person1 = new Object();
person1.name = 'Chris';
person1['gender'] = 'male';
person1.greeting = function() {
alert('Hi! I\'m ' + this.name + '.');
}
var person1 = new Object({
name : 'Chris',
gender: 'male',
greeting : function() {
alert('Hi! I\'m ' + this.name + '.');
}});
Object对象的create方法
var person2 = Object.create(person1);
JavaScript有个内嵌的方法create(), 它允许您基于现有对象创建新的对象。person2是基于person1创建的, 它们具有相同的属性和方法。这非常有用, 因为它允许您创建新的对象而无需定义构造函数。缺点是比起构造函数,浏览器在更晚的时候才支持create()方法(IE9, IE8 或甚至以前相比), 加上一些人认为构造函数让您的代码看上去更整洁 —— 您可以在一个地方创建您的构造函数, 然后根据需要创建实例, 这让您能很清楚地知道它们来自哪里。
原型类的定义
事实上,一种极其常见的对象定义模式是,在构造器(函数体)中定义属性、在 prototype 属性上定义方法。如此,构造器只包含属性定义,而方法则分装在不同的代码块,代码更具可读性,如下所示:
// 构造器及其属性定义
function Test(a,b,c,d) {
// 属性定义
};
// 定义第一个方法
Test.prototype.x = function () { ... }
// 定义第二个方法
Test.prototype.y = function () { ... }
原型继承类的定义
function Teacher(first, last, age, gender, interests, subject) {
Person.call(this, first, last, age, gender, interests);
this.subject = subject;
}
Teacher.prototype = Object.create(Person.prototype);
//将覆盖Person对象的greeting方法
}
call()函数允许您调用一个在这个文件里别处定义的函数。第一个参数指明了在您运行这个函数时想对“this”指定的值,也就是说,您可以重新指定您调用的函数里所有“this”指向的对象。其他的变量指明了所有目标函数运行时接受的参数。
用Object.create()来创建一个和Person.prototype一样的新的原型属性值(这个属性指向一个包括属性和方法的对象),然后将其作为Teacher.prototype的属性值。这意味着Teacher.prototype现在会继承Person.prototype的所有属性和方法。
还需要完成一件事 — 现在Teacher()的prototype的constructor属性指向的是Person(), 这是由我们生成Teacher()的方式决定的,因此constructor属性指向Teacher即可。
JSON对象
{
“name” : ['Bob', 'Smith'],
“age”:32,
“gender”: 'male',
}
JSON 是一种纯数据格式,它只包含属性,没有方法。
JSON 可以将任何标准合法的 JSON 数据格式化保存,不只是数组和对象。比如,一个单一的字符串或者数字可以是合法的 JSON 对象。
不像 JavaScript 标识符可以用作属性,在 JSON 中,只有字符串才能用作属性。
对象和文本间的转换
浏览器拥有一个内建的 JSON,包含以下两个方法,parse(): 以文本字符串形式接受JSON对象作为参数,并返回相应的对象;stringify(): 接收一个对象作为参数,返回一个对应的JSON字符串,如下所示:
var toString='{ "name" : "Chris", "age" : "38" }';
var toJSON=JSON.parse(toString);
var myJSON = { "name" : "Chris", "age" : "38" };
var myString = JSON.stringify(myJSON);
以上内容部分摘自视频课程04网页游戏编程JavaScript-18对象总结,更多示例请参见网站示例。跟着张员外讲编程,学习更轻松,不花钱还能学习真本领。
领取专属 10元无门槛券
私享最新 技术干货