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匿名函数应用的更多相关文章

  1. (转)Javascript匿名函数的写法、传参、递归

    (原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 javascript匿名函数的写法.传参和递归 http: ...

  2. (转)javascript匿名函数的写法、传参和递归

    (原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 http://www.veryhuo.com 2011-0 ...

  3. 第一百一十节,JavaScript匿名函数和闭包

    JavaScript匿名函数和闭包 学习要点: 1.匿名函数 2.闭包 匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数.声明:本节内容需要有面向对象和少量设计模式基础,否则无法听懂 ...

  4. JavaScript匿名函数的使用

    JavaScript匿名函数的使用:  http://www.cnblogs.com/skykang/archive/2010/12/03/1895274.html 一.什么是匿名函数? 在Javas ...

  5. javascript 匿名函数的理解(转)

    原网址 http://www.jb51.net/article/21948.htm javascript 匿名函数的理解(透彻版) 代码如下: (function(){ //这里忽略jQuery所有实 ...

  6. 简单介绍Javascript匿名函数和面向对象编程

    忙里偷闲,简单介绍一下Javascript中匿名函数和闭包函数以及面向对象编程.首先简单介绍一下Javascript中的密名函数. 在Javascript中函数有以下3中定义方式: 1.最常用的定义方 ...

  7. [从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)【转】

    (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在看到源码的第一眼,我就迷糊了.为什么只有 ...

  8. javascript 匿名函数的理解,js括号中括function 如(function(){})

    代码如下: (function(){  //这里忽略jQuery所有实现  })();  (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也 ...

  9. 浅谈JavaScript匿名函数与闭包

    一. 匿名函数   //普通函数定义: //单独的匿名函数是无法运行的.就算运行了,也无法调用,因为没有名称. 如: function(){             alert('123');    ...

  10. 深入理解javascript 匿名函数和闭包

    代码如下: (function(){ //这里忽略jQuery所有实现 })(); (function(){ //这里忽略jQuery所有实现 })();  半年前初次接触jQuery的时候,我也像其 ...

随机推荐

  1. 随机生成UUID(GUID)的方法

    - (NSString *)UUID { CFUUIDRef uuid_ref = CFUUIDCreate(NULL); CFStringRef uuid_string_ref= CFUUIDCre ...

  2. PPPoE(以太网上的点对点协议)

    协议概述 PPPoE分为两个阶段,即Discovery(地址发现)阶段和PPP会话阶段.当某个主机希望发起一个PPPoE会话时,它必须首先执行Discovery来确定对方的以太网MAC地址并建立起一个 ...

  3. java问题排查可能用到的一些命令

    1. jmap查询jvm内存使用情况 -heap :打印jvm heap的情况 -histo: 打印jvm heap的直方图.其输出信息包括类名,对象数量,对象占用大小. -histo:live : ...

  4. Query 一些简单的效果

    Query 一些简单的效果 $(selector).hide(speed,callback); 隐藏 $(selector).show(speed,callback); 显示 $(selector). ...

  5. python的or操作符连接多个字符串含义是什么?

    研究odoo代码的时候发现其中有一行语句让人费解 self.rcfile = os.path.abspath( self.config_file or opt.config or os.environ ...

  6. LeetCode-Search in Rotated Sorted Array

    Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...

  7. 结对编程--基于android平台的黄金点游戏

    游戏内容: 阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫“黄金点”的游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或1 ...

  8. kbengine里如何使用git快速下载项目?

    项目有两个镜像,github[https://github.com/kbengine/kbengine.git] ,osc开源中国[https://git.oschina.net/likecg/kbe ...

  9. linux修改mysql密码

    以root为列. 查看文件安装路径whereis mysql   查询运行文件所在路径(文件夹地址) which mysql /usr/bin/mysqld_safe: line 178: 5930 ...

  10. easycwmp在开发板上的配置

    原创作品,转载请注明出处 copyright:weishusheng   2015.3.18 email:642613208@qq.com 平台: Linux version 2.6.32-279.e ...