JavaScript快速充电

[size=large][color=red]JavaScript快速充电[/color][/size]
Netscape发明的,思想来自函数语言Schema和Self,有点接近Python.
特征:弱类型,动态解析,函数是对象,对象基于Prototype
前三个特征容易理解,最后一个要重点解释。

最基本的最佳实践:在大型程序中使用Fuction和对象!不要流水账式编程。

The easiest way to create an object is:
var myObject = new Object();

JavaScript对象本质上是关联数组。

小提示:注意将函数赋给变量时使用functionName()与functionName的区别,前者是将函数的结果付给变量,而后者将函数引用付给变量。

可以使用JSON创建和修改JavaScript对象,JavaScript也可以修改JSON创建的对象。

[b]构造函数/类/prototype属性[/b]
JavaScript也有对象和类的概念,但是没有内建继承的概念。事实上,每个JavaScript对象都是相同基类的实例。这个基类有能力在运行时将成员字段和函数与自己绑在一起。

安全的替代品:prototype属性
prototype是JavaScript对象的一个属性,在OO语言中没有对等物。函数和属性可以与构造函数的prototype关联起来。然后prototype和new关键字协同工作,当使用new调用函数时,函数prototype的所有属性和方法会附加到结果对象上。

function MyObject(name, size){
this.name = name;
this.size = size;
}

MyObject.prototype.tellsize = function(){
alert("size of "+this.name+" is "+this.size);
}

var myObj = new MyObject("tiddles", "7.5 meters");
myObj.tellSize();


注意,在声明构造函数之后,我们才能引用prototype,对象之恩那个继承那些在调用构造函数之前就已经附加到prototype上的东西。prototype可以在两次调用构造函数之间进行修改,并且可以附加任何东西,不仅仅是函数,到prototype上。

使用prototype来为JavaScript对象定义类似于类的行为,是一条安全和可靠的路径。

[b]扩展内建类[/b]
在Web浏览器中,一些核心类是可以通过prototype机制进行扩展的。

Array.prototype.indexOf = function(obj) {
var result = -1;
for (var i=0; i< this.length; i++) {
if (this[i]==obj){
result=i;
break;
}
}
}


[b]prototype的继承[/b]
JavaScript没有本地实现,不过有一些灵巧的变通方法。

[b]JavaScript对象的反射[/b]
用于发现对象的类型

[b]事件处理和函数上下文[/b]
在编程方式声明Dom元素的事件处理函数时,即使没有为函数分配参数,当点击Dom元素时,Event对象作为了函数调用的参数,元素本身作为上下文对象。

如果希望事件处理函数引用它附加到的模型对象,有两种方法:
1.使用名称引用模型
建立全局数组保存模型对象名称与引用对应关系,使用模型对象名称作为id的一部分建立Dom对象,利用Dom对象id的前缀在全局数组中查找模型对象。
2.向Dom节点附加模型
在Dom对象和模型对象之间创建循环引用。注意内存泄漏问题。

[b]闭包[/b]
Function对象本身是不完整的——为了调用他,我们需要传入一个上下文对象和一组参数,在最简单的情况下,闭包可以看作是捆绑了运行所需所有资源的Function对象。


function Robot(){
var createTime = new Date();
this.getAge = function(){
var now = new Date();
var age = now-createTime;
return age;
}
}


闭包仅仅当内部函数创建在外部函数之内的时候才能工作。

闭包与外部函数的本地变量绑在一起,使得外部函数不能被垃圾回收。

创建闭包的最常见场合时将事件处理回调函数绑定到事件源上。

对水平一般的Ajax程序员的建议是:如果有替代方法,就避免使用闭包。如果使用prototype来给自定义对象类型分配函数,那么你就不会重复创建函数,也不会创建闭包。
[code]
function Robot(){
this.createTime = new Date();
}

Robot.prototype.getAge = function(){
var now = new Date();
var age = now - this.createTime;
return age;
}
[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值