JavaScript对象
在JavaScript中,对象是国王。 如果你理解了对象,你懂的JavaScript。
在JavaScript中,几乎“一切”是一个对象。
- Booleans可以是对象(或对象处理的原始数据)
- Numbers可以是对象(或对象处理的原始数据)
- Strings可以是对象(或作为对象处理原始数据)
- Dates总是对象
- Maths总是对象
- Regular表达式总是对象
- Arrays总是对象
- Functions总是对象
- Objects是对象
在JavaScript中,所有值,除了原始的价值观,是对象。
原始值是:字符串("John Doe")数字(3.14), true, false, null和undefined 。
对象是包含变量变量
JavaScript的变量可以包含单个值:
对象是变量太多。 但是,对象可以包含许多值。
这些值写为名称:值对(名称和冒号分隔值)。
JavaScript对象是一个名为值的集合
对象属性
命名值,在JavaScript对象,被称为属性 。
属性 | 值 |
---|---|
firstName | John |
lastName | Doe |
age | 50 |
eyeColor | blue |
写为名称值对的对象是类似于:
- 在PHP关联数组
- 在Python字典
- 用C哈希表
- 在Java中哈希映射
- 在哈希Ruby和Perl
对象的方法
方法是,可以在对象上执行的动作 。
对象属性既可以是原始值,其他对象和函数。
对象方法是包含一个函数定义的对象属性。
属性 | 值 |
---|---|
firstName | John |
lastName | Doe |
age | 50 |
eyeColor | blue |
fullName | function() {return this.firstName + " " + this.lastName;} |
JavaScript对象是命名的值,被称为属性和方法的容器。
您将了解更多关于在下一章方法。
创建JavaScript对象
使用JavaScript,您可以定义和创建自己的对象。
有不同的方式来创建新的对象:
- 定义和创建一个对象,使用对象文本。
- 定义和创建一个对象,用关键字new。
- 定义对象的构造函数,然后创建构造类型的对象。
在的ECMAScript 5中,对象也可以与该函数创建Object.create()
使用对象文本
这是创建一个JavaScript对象的最简单方法。
使用对象文本,你俩定义并在一条语句创建一个对象。
一个对象文字是名称的列表:值对(如age:50 )花括号内{}
下面的示例创建四个属性的新JavaScript对象:
空格和换行并不重要。 对象定义可以跨越多行:
使用JavaScript的新关键字
下面的例子还创建有四个属性的新JavaScript对象:
例
var
person = new Object();
person.firstName = "John";
person.lastName = "Doe";
person.age = 50;
person.eyeColor = "blue";
试一试» 上面两个例子做同样的。 没有必要用new Object()
为简单起见,可读性和执行速度,使用第一个(对象字面方法)。
使用对象构造函数
上面的例子是在许多情况下的限制。 他们只能创建一个对象。
有时候,我们希望有可用于创建一种类型的许多对象“对象类型”。
创建“对象类型”的标准方法是使用一个对象的构造函数:
例
function person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
var
myFather = new person("John", "Doe", 50, "blue");
var myMother = new person("Sally", "Rally", 48, "green");
试一试» 上述功能(人)是一个对象的构造函数。
一旦你有一个对象的构造函数,可以创建同一类型的新对象:
var myFather = new person("John", "Doe", 50, "blue");
var myMother = new person("Sally", "Rally", 48, "green");
在this关键字
在JavaScript中,所谓的东西this是“拥有”的JavaScript代码的对象。
的值this ,在一个功能中使用时,是“拥有”的功能的对象。
的值this ,在一个对象中使用时,是对象本身。
在this关键字在对象的构造不具有价值。 它仅用于新对象的替代品。
值this将成为新的对象的时候,构造函数用于创建一个对象。
注意, 这不是一个变量。 它是一个关键字。 你不能改变的值this 。
内置的JavaScript构造
JavaScript有本地对象内置的构造函数:
例
var x1 = new Object(); // A new Object object
var x2 = new String(); // A new String object
var x3 = new Number(); // A new Number object
var x4 = new Boolean() // A new Boolean object
var x5 = new Array(); // A new Array object
var x6 = new RegExp(); // A new RegExp object
var x7 = new Function(); // A new Function object
var x8 = new Date(); // A new Date object
试一试» 的Math()对象不是在列表中。 数学是一个全局对象。 新的关键字不能在数学中使用。
你知道吗?
正如你所看到的,JavaScript有对象的基本数据类型字符串,数字,和布尔的版本。
没有任何理由来创建复杂的对象。 原始值执行快得多。
而且也没有理由使用新Array() 使用数组常量来代替: []
而且也没有理由使用新RegExp() 使用模式,而不是文字: /()/
而且也没有理由使用新Function() 使用函数表达式来代替: function () {}
而且也没有理由使用new Object() 使用对象文本来代替: {}
例
var x1 = {}; // new object
var x2 = ""; // new primitive string
var x3 = 0; // new primitive number
var x4 = false; // new primitive boolean
var x5 = []; // new array object
var x6 = /()/ // new regexp object
var x7 = function(){}; // new function object
试一试» JavaScript的对象是可变
对象是可变的:它们都通过引用解决,而不是价值。
如果y是一个对象,下面的语句不会产生y的副本:
var x = y; // This will not create a copy of y.
对象x不是y的副本 。 这为 y。 x和y指向同一个对象。
到y的任何改变也将发生变化的x,由于x和y是相同的对象。
例
var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"}
var x = person;
x.age = 10; // This will change both x.age and person.age
试一试»