1.关于匿名类

var  class1={p1:value1,p2:value2};

这个也可以写成

var class1={};

class1.p1=value1;

class1.p2=value2;

首先所有的匿名类都是继承与Object核心对象的,var class1={} 意味着实例化了一个Object对象,它拥有Object对象的原生属性和原生方法。

但是你不能为匿名类添加原生方法,例如这样写是错误的:

class1.prototype.func1=function(){};

你也不能尝试用new() 方法来构造一个新的与class1有相同的属性的新对象,因为它已经实例化了。以下写法也是错的:

var classB=new classA();

这是无法构造的,

准确的说,匿名类实际上是继承与Object的某一个半实例,相当于C#中的静态类。你可以为他添加方法和属性

例如:

class1.func1=function(){}

调用的时候就这样:

class1.func1();  酷似C#中的静态类

但是你可以为Object添加原生函数,这样你的匿名类(实际上是所有的类)都有这个方法

例如:

var class1={};

class1.p1=value1;

class1.p2=value2;

Object.prototype.func1=function(){  alert("1")  };

class1.func1();

是没有问题的,但是这样一来,所有的实例化对象都有了func1()方法。实际应用中应该避免给Object类添加原生方法。
2.关于匿名函数

先说说关于Javascript的函数:

可以这样说,JavaScript中一切皆是对象,function自然不例外,function可以作为函数,类,也可以当成一个被函数对象返回

看下面的例子:

function a()
{

alert("Hello Febird!");

this.aa="aa";
  this.show=function ()
  {
        alert(this.aa);
  };

this.sayHello=function()

{

return function()   {alert("hello"); }   ;

};
}

var aaa=new a();
aaa.show();

aaa.sayHello();

其中最外面的一个function是定义了一个类 a ,他有属性aa,方法show(),sayHello();这两个都是匿名函数,而sayHello中的function便是函数作为一个返回值的例子。

实际上可以这样想,匿名函数就是一块没有命名的代码块,当你把他赋值给别的变量的时候,那么那个变量就是一个函数,准确的说那是一个函数指针^_^。

在Javasript中,匿名函数是很有特点的东西了,也是非常有用,也是有些难以理解的。

比如在写Ajax引用的时候,如果不依靠别的JSF,自己写一个通用的Ajax话,一般这样写:

var xhr=new XMLHttpRequest(); //已经封装,可以适应不同的浏览器;

function DoAjax ()

{

xhr.onreadystatechange=processFunction;

xhr.open("GET",url,true);

xhr.send(null);

}

function processFunction()

{

//do something with XMLHttpRequest;

if(xhr.readState!=4||xhr.status!=200) return false;

alert(xhr.responseText);

}

在一般的Ajax引用中,也许只要一个XMLHttpRequest对象,而且onreadystatechange的处理函数必须没有参数,有参数就出错,

所以,一般经常会写一个全局变量XMLHttpRequest,再在processFunction中用到这个全局变量,但是如果我要建立几个

XMLHttpRequest的并发连接怎么办呢?这个就不能用全局变量了,但是处理函数又不能有参数,怎么搞,可以这样:

function DoAjax ()

{

var xhr=new XMLHttpRequest();

xhr.onreadystatechange=processFunction(xhr);

xhr.open("GET",url,true);

xhr.send(null);

}

function processFunction(_xhr)

{

return function()

{

//do something with XMLHttpRequest;

if(_xhr.readState!=4||_xhr.status!=200) return false;

alert(_xhr.responseText);

};

}

怎么理解?虽然processFunction函数有参数,但是它返回的函数没有参数!而这两个函数之间是怎么进行的值传递呢?

这里不妨引用一句话:

“为了函数能够正确的执行,需要被函数使用的,词法作用域中的,非全局数据,
存在于函数的闭包之中。”

可以这样理解:

当我们把processFunction()返回的函数,在processFunction之外使用的时候,依然要记得自己被定义时的上级作用域中的各种变量的值。这些需
要被记住的值,就是“闭包”。
3.关于原生对象

原生,即prototype,他提供我们了扩展、改造原有对象的方法。例如我们可以为已知对象,包括JavaScript的核心对象Array,Number,Math,Object,Boolean等和自定义类添加方法或者属性。

例如:

Number.prototype.toHexString = function () {

return this.toString(16);

};

var num=10

alert(num.toHexString());

输出A;

你可以为Object对象添加方法,这样,以后任意一个对象都有这个方法,因为其它对象都是从Object继承而来的。

你也可以再造现有函数

Function.prototype.toString = function () {

return “Function Locked”;

};
4.关于This

在JavaScript中,并没有严格的面向对象概念,自然也没有类的构造函数这样的概念。var o=new Obj();这样的语法,看起来似乎和Java/C++相当类似,但是他背后的执行过程是不同的。首先,解释器会new一个空的Object对象。然后将这个空的Object,作
为隐藏的参数传递给function Obj()。在Obj函数中访问到的this,其实就是这个传入的空的Object 对象。所以,如果这个Object,

并非为空,这就是所谓:“this关键字关联于执行时的作用域”的含义。

如果你想把一个函数作为“构造函数”,那么就不要在函数的最后加上return语句。因为如果没有return语句,new算符返回的就是

那个被操作过以后的this。一旦你通过return返回了别的东西,这个this就被废弃掉了。对于函数的调用者来说,就会相当的困惑。

Javascript匿名类相关推荐

  1. .Net 之匿名类(AnonymousType)(转载)

    一..NET 3.0时代开始引入匿名类概念 .NET3.0 时,微软加入了匿名类到.net 中.javascript 程序员对匿名类并不陌生.但是对于当时的.NET程序员而言,应该属于一个新鲜事物.. ...

  2. 匿名内部类和匿名类_匿名schanonymous

    匿名内部类和匿名类 Everybody loves a fad. You can pinpoint someone's generation better than carbon dating by ...

  3. java匿名类的替代使用方法

      读自:  别把Java当Javascript android开发时有些程序员把onCreate写上千行,匿名类层叠可读性差 替代方法有三种: 1 本类继承接口,如MainAcitivy继承onCl ...

  4. java中的匿名类方法覆盖_Java技巧:用匿名类来实现简化程序调试

    Java技巧:用匿名类来实现简化程序调试 在Java中,匿名类(Anonymous inner classes)多用来处理事件(event handle).但其实,它们对于debug也很有帮助.本文将 ...

  5. Java 匿名类也能使用构造函数

    为什么80%的码农都做不了架构师?>>>    匿名类虽然没有名字,但可以有一个初始化块来充当构造函数. public enum Ops {ADD, SUB} public clas ...

  6. Java中创建线程需要使用的类_如何通过使用Java中的匿名类创建线程?

    甲线程是可以同时与该程序的其他部分被执行的功能.所有Java程序都有至少一个称为主线程的线程,该线程由Java虚拟机(JVM)在程序启动时由主线程调用main()方法创建. 在Java中,我们可以通过 ...

  7. java内部类和匿名类

    2019独角兽企业重金招聘Python工程师标准>>> 内部类:一个类在另一个类的内部,即我们在一个类里面再写一个类. 简单来阐述两种内部类的用法: 1.内部类可以直接引用外部类的成 ...

  8. java 为什么有匿名类_全面了解Java中的内部类和匿名类

    Java内部类(Inner Class),类似的概念在C++里也有,那就是嵌套类(Nested Class),乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了 ...

  9. MVC匿名类传值学习

    刚接触MVC+EF框架不久,但一直很困惑的就是控制器能否及如何向视图传递匿名类数据.宝宝表示很讨厌去新建实体类啦,查询稍有不同就去建一个实体类不是很麻烦吗,故趁阳光正好,周末睡到自然醒后起来尝试了之前 ...

  10. 实现Javascript编写类的方式1(原生方式)

    网上实现javascript写类的方法有很多, 总结下不外乎以下几种. 我自己学习总结了一下. 构造方法方式 原型方式 构造方法+原型的混合方式 现在具体分析一下以上方式的优缺点: 构造方法方式 这是 ...

最新文章

  1. plt.figure()的使用
  2. 前端js判断上传是否为EXCEL表格问题
  3. PPF(Point Pair Features)原理及实战技巧
  4. redis zse如何取值_你真的懂redis的數據結構了嗎?redis內部數據結構和外部數據結構揭秘...
  5. c语言变量名必须用小写 常量用大写,day02 -C语言 常量 变量 数据类型 进制转换 数据溢出...
  6. ASP.NET MVC控制器获取前端视图FORM表单的方法
  7. linux 运维基础问题_Linux基础能力问题和解答
  8. 由硬盘供电不稳、数据线品质差造成的蓝屏
  9. delimiter在mysql中的作用_细细研究MySql中delimiter起到的作用_MySQL
  10. SQLSERVER语句的执行时间
  11. Android 学习 笔记_07. XML文件解析
  12. 开发者必备英文网站合集
  13. jsp:param能不能传递变量_变量、作用域与内存
  14. 自媒体运营技巧之抖音快手怎么上热门
  15. Dem地形数据转换为cass支持的dat格式教程
  16. 【深度学习】DCGAN实现动漫头像生成详细说明
  17. 152. 精读《recoil》
  18. java基础学习——Swing图形化用户界面编程
  19. JVM规范(四)Frames
  20. 中南大学计算机学院张伟,张伟(数学家)_百度百科

热门文章

  1. MATLAB:Your network connectionmay be down or your proxy settings improperly configured
  2. LinuxShell作业题-1
  3. HDOJ 1164 Eddy's research I(拆分成素数因子)
  4. 电商双十一调查数据分析报告
  5. luogu1378 油滴扩展 (深搜)
  6. cad墙线打断lisp_[求助]很多相交线快速打断 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
  7. 一封学生来信:突破大学的迷茫
  8. 2019长江课堂作业答案_2019年长江作业本同步练习册三年级语文下册人教版答案...
  9. 手机android系统锁了怎么解决方法,安卓手机被恶意软件锁机了怎么办?试下这五种方法...
  10. 中通快递宣布全球发售定价