JavaScript 有不止一种方法创建对象.
简单的对象创建
最简单的创建对象的方法是用一个新的 Object 开始, 然后向其中添加内容.
要创建一个新 Object, 只需:
var newObject = new Object();
变量 newObject 现在指向一个 Object 的实例, Object 是 JavaScript 中所有对象的基类. 要给它增加一个叫 firstName 的元素, 只需:
newObject.firstName = "frank";
也可以很容易地添加函数:
- newObject.sayName = function(){
- alert(this.firstName);
- }
现在调用 newObject.sayName()就会弹出一个 "frank" 的警告信息.
与大多数成熟的面向对象语言不同, 在 JavaScript 中, 不必为对象实例创建类或蓝图. 你可以在这里所写的那样, 在运行时创建它. 在对象的整个生命周期中都可以这么做. 在网页中, 这意味着可以在任何时候给对象添加属性和方法.
事实上, JavaScript 实现只是把所有对象当坐关联数组. 你可以这样检索 newObject 中 firstName 字段的值:
var theFirstName = newObject["firstName"];
同样的, 可以这样调用 sayName()函数:
newObject["sayName"]();
可以利用这个特点实现基于某种逻辑调用某个对象的方法:
- var newObject = new Object();
- newObject.firstName = "frank";
- newObject.lastName = "tom";
- newObject.sayFirstName = function(){
- alert(this.firstName);
- }
- newObject.sayLastName = function(){
- alert(this.lastName);
- }
- var funName = 1;
- if(funName == 1 ){
- funName = "sayFirstName"
- }
- if(funName == 2 ){
- funName = "sayLastName"
- }
- newObject[funName]();
原型
JavaScript 中的每一个独立的对象都有一个与之关联的原型 (prototype) 属性, 它可以被看做一个简化的继承形式. 基本上, 他的工作方式是: 当构造一个对象的新实例时, 定义在对象的原型中的所有属性和方法, 在运行时都会附着在那个新的实例上. 例如:
- function newClass(){
- this.firstName = "frank";
- }
- newClass.prototype.sayFirstName = function(){
- alert(this.firstName);
- }
- var nc = new newClass();
- nc.sayFirstName();
与之前的例子不同, 无论你创建了多少个 newClass 实例, 内存中 sayFirstName()函数都只会有一个单独的实例. 这个方法实际是附加在每个实例上, 而且 this 关键字还是在运行时被计算. 所有 this 通常指向它所属的那个特定的 newClass 实例.
面向对象的好处
无论选择哪种方法, 将代码面向对象化都有很多好处. 一个重要的好处就是, 每一个对象本质上就是一个命名空间. 可以用此来模拟 Java 和 C# 的 包.
另一个好处就是可以使用对象来隐藏数据. 例如:
- function newClass(){
- this.firstName = "frank";
- lastName = "tom";
- }
- var nc = new newClass();
- alert(nc.firstName);
- alert(nc.lastName);
执行上面的代码会有两个警告信息: 第一个输出 "frank", 第二个输出 "undefined". 这是因为 lastName 字段在 newClass 的实例外是不可访问的. 注意字段定义的不同: 任何使用 this 关键字定义的字段, 都可以在类之外访问. 而没有使用 this 定义的字段, 都只能在类内部访问. 该规则对方法同样适用.
使用 JSON 创建对象
JSON 实际是 JavaScript 规范中的一个核心部分, 最初的目的是为了快速简便地定义赋值的对象关系图, 也就是那些嵌套与其他对象中的对象的实例.
JavaScript 里的对象只是隐藏在面具下的关联数组. 这就是 JSON 可以运转的原因.
下面是使用 JSON 创建一个 newObject 对象的例子:
- function sayFirstName(){
- alert(this.firstName);
- }
- var newObject = {
- firstName:"frank",
- lastName:"tom",
- sayLastName:function(){alert(this.lastName;)},
- sayFirstName:sayFirstName
- };
使用 JSON 和定义一个数组非常相似. 对象中的函数可以是内联的(上例 sayLastName()), 也可以引用外部函数(上例 sayFirstName()).
在 JSON 中, 可以随意嵌套对象定义来创建对象的层级关系. 入下, 在 newObject 中加入了 LastName 对象.
- function sayFirstName(){
- alert(this.firstName);
- }
- var newObject = {
- firstName:"frank",
- lastName:{
- name:"Tom",
- sayLastName:function(){alert(this.name);}
- },
- sayFirstName:sayFirstName
- };
然后, 可以通过 newObject.LastName.sayLastName()来调用相关方法.
来源: http://www.qdfuns.com/article/51117/a728310786c8d38bde38cf766ea871dd.html