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. 【JavaScript忍者秘籍】

  2. travel for django

    参考博客:http://www.cnblogs.com/wupeiqi/articles/5237672.html 一:框架的本质: 最原始的框架:服务端一个简单的socket,接收客户端发出的请求, ...

  3. 从小工到专家 ——读《Java程序员职场全攻略》有感

    从小工到专家 ——读<Java程序员职场全攻略>有感   <Java程序员职场全攻略>是以故事的形式,向读者介绍Java程序员的职场经验.作者牛开复在北京从事软件开发,已经是一 ...

  4. linux常用工具集合

    网络: nm-tool 查看网络状态(有线/无线)

  5. OS实验报告——作业调度模拟程序

    一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行, ...

  6. js 测试

    今天js测试题目: 被基础题目虐暴......惨不忍睹 1. var num = 2; switch(num){ case 1: console.log("1"); case 2: ...

  7. epoll 反应堆

    epoll反应堆模型 ================================ 下面代码实现的思想:epoll反应堆模型:( libevent 网络编程开源库 核心思想) . 普通多路IO转接 ...

  8. while 循环

    while(condition) { //........ } 循环在我们从事C语言开发的过程中可以说用的挺多的,但是今天想起了一个问题,源于我要在一个长字符串中查找特定字符串,于是我写了如下代码: ...

  9. dw的流体网格布局

    在设计视图拖拽 在插入面板中选择插入流体网格布局标签 在对话框中如果不选中新建行复选框 如果总的列数是5列 一行的列宽和上一行的列宽加起来没有5列的话,下一行会上浮

  10. Socket 通信(基础原理、实时聊天系统雏形)

    什么是 Socket? Socket 英文直译为"孔或插座",也称为套接字.用于描述 IP 地址和端口号,是一种进程间的通信机制.你可以理解为 IP 地址确定了网内的唯一计算机,而 ...