资料整理

 

JSON 入门与JavaScript提高(原创)

原文 Quick guide to somewhat advanced JavaScript tour of some OO features
出处 http://www.sergiopereira.com/articles/advjs.html


什么是JSON? JavaScript Object Notation -------javascript对象符号,一个Ajax中砰然出现的新话题.其实它就是javascript中申明对象的方法。让我们来看一个示例
var myPet = 
   color: 'black', 
   leg_count: 
4
   communicate: 
function(repeatCount)
for(i=0;i<repeatCount;i++) alert('Woof!');}
 
}
;

这里我们就创建了一个对象引用,这个对象包含了2个属性(color,leg_count)和一个方法(communicate),
在myPet对象的列表中不难看出,这些属性和方法之间都是用逗号","分隔开来的。属性很好理解,而方法的创建则是由一个匿名function标记的。

在该对象被创建以后并且以myPet变量声明了以后我们就可以这样使用了:
alert('my pet is ' + myPet.color);
alert('my pet has ' 
+ myPet.legCount + ' legs');
//if you are a dog, bark three times:
myPet.communicate(3);

大家可以看到,JSON可以漂亮地应用到javascript中任何一个地方,作为function参数、返回值、服务器响应...

你理解了吗?function同样也是一个对象。
---------------------------------------------------------------
或许JS程序员中有些人从来就不这么认为,但是function确实也是一个Object。下面我们可以做个实验来验证一下,将你的function给你的另一个function做为参数传递,就传一个String一样。
var myDog = {
    bark: 
function(){
        alert('Woof
!');
    }

}
;

var myCat = {
    meow: 
function(){
        alert('I am a lazy cat. I will not meow 
for you.');
    }

}
;
 
function annoyThePet(petFunction){
    
//let's see what the pet can do
    petFunction();
}


//annoy the dog:
annoyThePet(myDog.bark);
//annoy the cat:
annoyThePet(myCat.meow);

在这里我们传递了myDog.bark和myCat.meow给annoyThePet。注意它们后面都没有带括号"()",如果不这样做的话我们传递的将不是"方法",而是该方法的返回值(在此例中为"Undefine")。

如果你想我的懒猫学狗狗叫,你可以这样做:
myCat.meow = myDog.bark;
myCat.meow(); 
//alerts 'Woof!'

 
Arrays, items 和对象成员object members
请看下面2行

var a = new Array();
var b = [];

 

你可以在array中添加items:

var a = ['first', 'second', 'third'];
var v1 = a[0];
var v2 = a[1];
var v3 = a[2];

但是你在声明时对索引不做数量限制,你将可以通过它的名字访问这个JS对象中的任何成员,就象这样,创建一个空的对象,然后就可以不停地添加了:

var obj = {}//new, empty object
obj['member_1'] = 'this is the member value';
obj['flag_2'] 
= false;
obj['some_function'] 
= function()/* do something */};
            
等价于:

var obj = {
    member_1:'
this is the member value',
    flag_2: 
false,
    some_function: 
function()/* do something */}
}
;

在JS中,对象和关系型数组(hashes)两个概念通常是没有区别,下面的这两行代码是等价的:


obj.some_function();
obj['some_function']();


等了这么久,我可以拥有自己的Class了么?
OO的强大力量来自于类Class。当然了我们的JavaScript同样也可以做到这一点,请看吧:

//defining a new class called Pet
var Pet = function(petName, age){
    
this.name = petName;
    
this.age = age;
}
;

//let's create an object of the Pet class
var famousDog = new Pet('Santa\'s Little Helper', 15);
alert('This pet is called ' 
+ famousDog.name);

但是我们如何能够将方法加到我们的Pet  Class中来呢。我们可以为我们所有的类定义一个prototype属性。prototype属性其实也是一个对象,它包含一个类所拥有的一切其他对象。甚至默认JS类(Date,String,Number)也可以拥有prototype对象,使得各种新的方法和属性能扩充其中,让基础类获得更多的特性。
Pet.prototype.communicate = function()
    alert('I 
do not know what I should say, but my name is ' + this.name);
}
;
别忘了,我们得先导入 prototype.js才行。
ps: 个人认为象下面创建类,可能更简洁一点。
var Pet = Class.create();
Pet.prototype 
= {
    
//our 'constructor'
    initialize: function(petName, age){
        
this.name = petName;
        
this.age = age;
    }
,
    
    communicate: 
function(){
        alert('I 
do not know what I should say, but my name is ' + this.name);
    }

}
;    

将方法做为参数
如果你没有使用过支持closure的语言,象Ruby,C#,你会发现象这样的语法真是太有趣了:
var myArray = ['first', 'second', 'third'];
myArray.each( 
function(item, index){
    alert('The item 
in the position #' + index + ' is:' + item);
}
);

未完带续.........

posted on 2006-07-29 15:13 谢玮 阅读(567) 评论(2)  编辑  收藏 所属分类: 流行框架javascriptWeb

评论

# re: JSON 入门与JavaScript提高(原创) 2008-09-17 09:24 fgh

fgh  回复  更多评论   

# re: JSON 入门与JavaScript提高(原创) 2008-09-17 09:26 lp

The dogs and cats are interesting.  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(1)

随笔档案

文章分类

文章档案

搜索

最新评论