javascript匿名函数应用
1.给指定对象新增一些属性的写法:
/*给一个对象增加属性*/
var myDate=(function(obj){
obj.addName=function(name){
this.name=name;
}
return obj;
}(myDate||{}));
/*此用myDate||{}这种方式确保传进去的是一个对象*/
2.重载指定对象的某个方法:
var myDate2={name:'zhangsan',
addAge:function(age){
this.age=age;
}
};
var myDate2=(function(obj){
var oldAddAge=obj.addAge;//保留以前的方法,以后可以调用
obj.addAge=function(age){
oldAddAge(age+1);//这样写能重载myDate2的addAge方法吗?当然不能,这个age被加到了window对象上了。
}
return obj
}(myDate2||{}));
myDate2.addAge(10);
上面的写法是不行的,这样不能实现重载对象的某个方法,原因是对象原来的addAge方法中this指向了window,无法绑定到myDate2上面。
var myDate2={name:'zhangsan',
addAge:function(age){
this.age=age;
}
};
var myDate2=(function(obj){
//var oldAddAge=obj.addAge;
/*
//这个地方不能再保留以前的函数供以后使用了,原因是addAge函数中使用了this,如果再次引用
//this就指向了window对象。故重载函数中不能再调用原来的函数。
*/
obj.addAge=function(age){
this.age=age+10;
}
return obj;
}(myDate2||{}));
myDate2.addAge(10);
换成这种方式,可以重载对象中的addAge方法。
3.使用原型做一个简单加减运算:
var calc=function(numx,operx){
this.numx=numx;
this.operx=operx;
}
calc.prototype={
add:function(a,b){
return a+b;
},
sub:function(a,b){
return a-b;
}
};
var c=(new calc).add(3,4);
4.函数,对象,constructor,prototype之间的关系:
var FOO=function(){
this.name='zhangsan';
}
FOO.prototype.getName=function(){
return this.name;
}
var p=new FOO();
var d={};
console.log(p.constructor=== FOO);// true,用函数构造的对象,其构造函数是该函数本身
console.log(d.constructor===Function);//flase
console.log(d.constructor===Object);//true,直接生成的对象,其构造函数是Object
console.log(FOO.constructor===Function);//true,函数本身的构造函数,是Function
console.log(p.constructor.constructor===Function);//true,这个是一个传递
console.log(FOO.prototype.constructor===FOO);//true,每个函数都有一个prototype,其prototype.constructor指向该函数本身
当重写函数的prototype后,由函数够造的对象的构造函数会发生变化:
var BOO=function(){
this.name='zhangsan';
}
BOO.prototype={age:function(age){
this.age=age;
}
};//注意与上面的那种写法不一样,这种是重写,上面那种只是修改
var b=new BOO();
console.log(b.constructor===BOO);//false,由于重写了函数BOO的prototype导致constructor变化
console.log(BOO.constructor===Function);//true
console.log(BOO.prototype.constructor===BOO);//false,重写了prototype导致constructor变化
var BOO=function(){
this.name='zhangsan';
}
BOO.prototype={age:function(age){
this.age=age;
}
};
/*
BOO.prototype=new Object({age:function(age){this.age=age;}});
上面重写prototype相当于这种方法
*/
var b=new BOO();
console.log(b.constructor===Object);//true
console.log(BOO.prototype.constructor===Object);//true
如何修改BOO的构造函数呢?
var BOO=function(){
this.name='zhangsan';
}
BOO.prototype={age:function(age){
this.age=age;
}
};
BOO.prototype.constructor=BOO;//重写BOO函数的prototype.constructor以后可以修复这个问题
var b=new BOO();
console.log(b.constructor===BOO);//true
console.log(BOO.prototype.constructor===BOO);//true
javascript匿名函数应用的更多相关文章
- (转)Javascript匿名函数的写法、传参、递归
(原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 javascript匿名函数的写法.传参和递归 http: ...
- (转)javascript匿名函数的写法、传参和递归
(原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 http://www.veryhuo.com 2011-0 ...
- 第一百一十节,JavaScript匿名函数和闭包
JavaScript匿名函数和闭包 学习要点: 1.匿名函数 2.闭包 匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数.声明:本节内容需要有面向对象和少量设计模式基础,否则无法听懂 ...
- JavaScript匿名函数的使用
JavaScript匿名函数的使用: http://www.cnblogs.com/skykang/archive/2010/12/03/1895274.html 一.什么是匿名函数? 在Javas ...
- javascript 匿名函数的理解(转)
原网址 http://www.jb51.net/article/21948.htm javascript 匿名函数的理解(透彻版) 代码如下: (function(){ //这里忽略jQuery所有实 ...
- 简单介绍Javascript匿名函数和面向对象编程
忙里偷闲,简单介绍一下Javascript中匿名函数和闭包函数以及面向对象编程.首先简单介绍一下Javascript中的密名函数. 在Javascript中函数有以下3中定义方式: 1.最常用的定义方 ...
- [从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)【转】
(function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在看到源码的第一眼,我就迷糊了.为什么只有 ...
- javascript 匿名函数的理解,js括号中括function 如(function(){})
代码如下: (function(){ //这里忽略jQuery所有实现 })(); (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也 ...
- 浅谈JavaScript匿名函数与闭包
一. 匿名函数 //普通函数定义: //单独的匿名函数是无法运行的.就算运行了,也无法调用,因为没有名称. 如: function(){ alert('123'); ...
- 深入理解javascript 匿名函数和闭包
代码如下: (function(){ //这里忽略jQuery所有实现 })(); (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其 ...
随机推荐
- 【JavaScript忍者秘籍】
- travel for django
参考博客:http://www.cnblogs.com/wupeiqi/articles/5237672.html 一:框架的本质: 最原始的框架:服务端一个简单的socket,接收客户端发出的请求, ...
- 从小工到专家 ——读《Java程序员职场全攻略》有感
从小工到专家 ——读<Java程序员职场全攻略>有感 <Java程序员职场全攻略>是以故事的形式,向读者介绍Java程序员的职场经验.作者牛开复在北京从事软件开发,已经是一 ...
- linux常用工具集合
网络: nm-tool 查看网络状态(有线/无线)
- OS实验报告——作业调度模拟程序
一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行, ...
- js 测试
今天js测试题目: 被基础题目虐暴......惨不忍睹 1. var num = 2; switch(num){ case 1: console.log("1"); case 2: ...
- epoll 反应堆
epoll反应堆模型 ================================ 下面代码实现的思想:epoll反应堆模型:( libevent 网络编程开源库 核心思想) . 普通多路IO转接 ...
- while 循环
while(condition) { //........ } 循环在我们从事C语言开发的过程中可以说用的挺多的,但是今天想起了一个问题,源于我要在一个长字符串中查找特定字符串,于是我写了如下代码: ...
- dw的流体网格布局
在设计视图拖拽 在插入面板中选择插入流体网格布局标签 在对话框中如果不选中新建行复选框 如果总的列数是5列 一行的列宽和上一行的列宽加起来没有5列的话,下一行会上浮
- Socket 通信(基础原理、实时聊天系统雏形)
什么是 Socket? Socket 英文直译为"孔或插座",也称为套接字.用于描述 IP 地址和端口号,是一种进程间的通信机制.你可以理解为 IP 地址确定了网内的唯一计算机,而 ...