日常js之-对象
日常js之-对象
在《javascript权威指南》中说到,js中一切皆为对象。那我们总结下 一共有哪些对象,并且都要怎么定义他们,怎么使用他们,怎么扩展他们。
1. 定义对象
首先我们需要知道,我们要怎么定义他们。
1.1 现在最火的json对象:用在方便同ajax交互下.
var json = {"name":"hc","***":"1"};
//使用www.2cto.com
alert(json.name+" "+json.***);
为什么json会这么火呢?因为在我没有接触json前.通过ajax返回数据,解析文本串,是通过”|”来的. 例如:
var strResult = ajax.responseText;
http://ajax.responseTex为假设存放ajax返回文本. 1|id=’fffff’|name=’ccc’
如果我要获取name 我就需要 var attr = strResult.split(‘|' )[2];
这样既不直观也不面向对象。所以 当我接触了json后。一下就替换到字符串分割的这种做法了.
同时顺带说题外话,json字符串格式要求也比较松散 .上面的 var json={“name”} 的
name,可以使用双引号,单引号,甚至不用引号都可以。但是如果你使用jQuery等外带框架来进行解析的时候,则必须带上双引号。如果你使用最松散的
方式来解析的话 var json = eval("(“+str+”)”);//这样要求最小,但是容易被注入。
1.2 最原生的对象 : object
var obj = new Object();
//等价的json申明方式就是
var obj = {};
//所以在各大js框架中,基本上看不到new Object()这种写法,都是 obj = {}的写法;简单明了
1.3 最像类的对象: function
function User(name,***){
//这样是申明类的属性
this.name=name;
this.*** = ***;
//这样是申明类的公共方法
this.getMyFullName=function(){
return _firstname+this.name;
}
//这个是定义类的私有变量
var _name= name;
var _firstname="黄";
//这个是定义类的私有方法
function get***(){
}
}
定义好一个类,接下来就是实例他的。和C#一样,通过new 类来实例化他
var my = new User("hc","1");
alert(my.name);
alert(my.getMyFullName());
2.扩展对象
在各个js框架中基本都是这么几种方式来定义对象。我们知道怎么定义对象后。就需要知道怎么扩展他们。
要扩展对象,无非分为2种 ,一种是扩展整个类,一种就是只扩展某个类的实例化
2.1 prototype 属性
prototype 属性就是javascript用来满足我们扩展整个类 这个需求而产生的。
prototype 定义是 该属性指向当前对象所指向的原型。
光说定义和概念肯定不好理解,打个比方。如果你有需求想要在所有字符串或者数组上加一个方法,你要找谁?
微软才不会给你加个方法。所以这时候 prototype派上用场了.
String.prototype.getTempMethod = function () {
return "hc";
}
var str = "c";
alert(str.getTempMethod());//这样在string中你就拥有的你自己的专属方法
2.2 私有扩展
如果你只想你当前对象扩展一个方法,那么非常的简单,因为在js中所有方法,字段都是属性。即使是不存在属性方法也可以直接使用
只是它的值为undefined
//这时候alert的方法是undefined
var obj = {};
//这时候就在这个对象上定义了一个alert方法了
obj.alert = function(){{
}
摘自 ksh.xy
1. 定义对象
首先我们需要知道,我们要怎么定义他们。
1.1 现在最火的json对象:用在方便同ajax交互下.
var json = {"name":"hc","***":"1"};
//使用www.2cto.com
alert(json.name+" "+json.***);
为什么json会这么火呢?因为在我没有接触json前.通过ajax返回数据,解析文本串,是通过”|”来的. 例如:
var strResult = ajax.responseText;
http://ajax.responseTex为假设存放ajax返回文本. 1|id=’fffff’|name=’ccc’
如果我要获取name 我就需要 var attr = strResult.split(‘|' )[2];
这样既不直观也不面向对象。所以 当我接触了json后。一下就替换到字符串分割的这种做法了.
同时顺带说题外话,json字符串格式要求也比较松散 .上面的 var json={“name”} 的
name,可以使用双引号,单引号,甚至不用引号都可以。但是如果你使用jQuery等外带框架来进行解析的时候,则必须带上双引号。如果你使用最松散的
方式来解析的话 var json = eval("(“+str+”)”);//这样要求最小,但是容易被注入。
1.2 最原生的对象 : object
var obj = new Object();
//等价的json申明方式就是
var obj = {};
//所以在各大js框架中,基本上看不到new Object()这种写法,都是 obj = {}的写法;简单明了
1.3 最像类的对象: function
function User(name,***){
//这样是申明类的属性
this.name=name;
this.*** = ***;
//这样是申明类的公共方法
this.getMyFullName=function(){
return _firstname+this.name;
}
//这个是定义类的私有变量
var _name= name;
var _firstname="黄";
//这个是定义类的私有方法
function get***(){
}
}
定义好一个类,接下来就是实例他的。和C#一样,通过new 类来实例化他
var my = new User("hc","1");
alert(my.name);
alert(my.getMyFullName());
2.扩展对象
在各个js框架中基本都是这么几种方式来定义对象。我们知道怎么定义对象后。就需要知道怎么扩展他们。
要扩展对象,无非分为2种 ,一种是扩展整个类,一种就是只扩展某个类的实例化
2.1 prototype 属性
prototype 属性就是javascript用来满足我们扩展整个类 这个需求而产生的。
prototype 定义是 该属性指向当前对象所指向的原型。
光说定义和概念肯定不好理解,打个比方。如果你有需求想要在所有字符串或者数组上加一个方法,你要找谁?
微软才不会给你加个方法。所以这时候 prototype派上用场了.
String.prototype.getTempMethod = function () {
return "hc";
}
var str = "c";
alert(str.getTempMethod());//这样在string中你就拥有的你自己的专属方法
2.2 私有扩展
如果你只想你当前对象扩展一个方法,那么非常的简单,因为在js中所有方法,字段都是属性。即使是不存在属性方法也可以直接使用
只是它的值为undefined
//这时候alert的方法是undefined
var obj = {};
//这时候就在这个对象上定义了一个alert方法了
obj.alert = function(){{
}
摘自 ksh.xy
design_ss- 帖子数 : 122
积分 : 373
威望 : 0
注册日期 : 11-12-28
您在这个论坛的权限:
您不能在这个论坛回复主题
10/09/13, 06:50 am 由 design_ss
» javascript 函数的方法call()和apply()
09/09/13, 05:10 am 由 design_ss
» JS中typeof与instanceof的区别
08/08/13, 11:10 am 由 design_ss
» JS中的构造函数解析
08/08/13, 09:44 am 由 design_ss
» js对象属性方法大总结
08/08/13, 08:46 am 由 design_ss
» js中的值类型和引用类型小结 文字说明与实例
08/08/13, 06:35 am 由 design_ss
» CSS3中轻松实现渐变效果
05/07/13, 09:48 am 由 design_ss
» jQUery 常用实例
03/07/13, 09:56 am 由 design_ss
» mask_layer 遮照
03/07/13, 08:18 am 由 design_ss