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. 遍历 Input检测是否有重复的值

    在项目中需要遍历某个Table中的Input输入是否有重复的值,为此基于Jquery写了两种实现方式(关键在于取值方式): 方法1: function CheckGoodsNo() { var ish ...

  2. tornado中self.write() 写list

    tornado源码中不支持在self.write()中直接传入list对象,源代码如下 def write(self, chunk): if self._finished: raise Runtime ...

  3. CentOS7新特性

    一.CentOS7的4中模式 CentOS7里不在有0-6启动级别,而是4个target 1.graphical.target:多人模式,支持图形和命令行两种登录,对应之前的3,5级别 2.multi ...

  4. VMware Player安装Debian系统

    尝试用虚拟机来安装Debian系统,感觉这样一来安装与卸载方便,二来也可以在Linux系统安装出现问题的情况下方便在host主机上查找解决方法,同时也避免了要重新设置分区来安装Linux系统(双系统的 ...

  5. 跟我学Windows Azure 三 使用vs2013创建windows azure web site

    首先我们需要登陆我们的windows azure上,然后访问 https://manage.windowsazure.cn/publishsettings/index 他会让我们下载我们的订阅证书文件 ...

  6. iostat

    http://m.blog.csdn.net/article/details?id=43196731 http://blog.csdn.net/haiross/article/details/4319 ...

  7. linux下一些可用库

    1. musl: 为了夸平台,采用小巧玲珑的libc进行静态编译.

  8. .net 创建计划任务开机后自动以管理员身份启动运行 win7 ~ win10

    假如要启动 this.exe.以下逻辑中会启动先后关联启动三个实例分别是ABC.先启动第一个实例A,A启动实例B,B启动实例C. 要求: 1.如果没有以管理员权限运行,则请求管理员权限运行,即使没有请 ...

  9. BarTender如何将条码下的数字嵌入到条码中

    现今社会,在各种包装箱子.书籍.超市商品等东西上面,必不可少的绝对要数条形码或者二维码了.有时候,根据客户的需求或者其他条件限制等原因,我们需要将BarTender 2016条码下的数字嵌入到条码中. ...

  10. awk 的使用

    awk [-F field-separator] 'commands' input-file(s) 其中,commands 是真正awk命令,[-F域分隔符]是可选的.input-file(s) 是待 ...