`
carolaif
  • 浏览: 71062 次
  • 性别: Icon_minigender_2
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

深入javascript function对象(一)

阅读更多

http://bbs.51cto.com/thread-568228-1.html

以前学习javascript的时候,是被js漂亮的界面控制所吸引,所以学习的时候多数是以阅读网上js代码为主,凭借着自己对其他面向对象语言的理解,还是凑活能写些复杂的js程序。但是写的越多,不明白的也就越多,很多时候都只是知道要这么用,因为以前接触到的项目就是这么用的,但是不明白为什么这么写,所以,很早就想找点空闲的时间系统的学习下javascript,苦于一直没时间,拖了这么长久。呵呵,才有时间学学,把学习的总结写下来给新手一些参考,也给自己一个备忘。如果有什么写错的地方,希望高手们不要见笑。说了这么多废话,下面进入正题。
不管是绚丽多彩的js界面控制,还是编写复杂多样的ajax应用。相信function的高级应用是必不可少的。那么js中的function到底有什么不同呢?
1.      
Javascript
函数

Javascript定义一个函数一般有如下4种方式:
fnction huchen(…){…}
var huchen2=function(…){…};
var huchen3=function huchen4(…){…};
var huchen5=new Function();

1种就是最常用的方法,
function关键字定义一个函数,并为每个函数指定一个函数名,通过函数名来进行调用。函数都是被维护为一个对象,这就是要介绍的函数对象(Function Object)。即用function关键字定义一个函数对象。

后面3种是把函数对象(Function Object)赋给变量,而这个函数对象本身是没有名字的,即匿名函数。
2.      
函数对象(Function Object)

js中,有很多内部对象,比如:ObjectArrayDateRegExpMathError。这些名称实际上表示一个类型,可以通过new操作符返回一个对象。然而Function对象和其他对象不同,当用typeof得到一个Function对象的类型时,它仍然会返回字符串“function”,而typeof一个数组对象或其他的对象时,它会返回字符串“object”。下面的代码示例了typeof不同类型的情况:
以下是引用片段:  

alert(typeof(Function));

alert(typeof(new Function()));

alert(typeof(Array));

alert(typeof(Object));

alert(typeof(new Array()));

alert(typeof(new Date()));

alert(typeof(new Object()));


  运行这段代码可以发现:前面4条语句都会显示“function”,而后面3条语句则显示“object”,可见new一个Function实际上是返回一个函数。这与其他的对象有很大的不同。其他的类型ArrayObject等都会通过new操作符返回一个普通对象。尽管函数本身也是一个对象,但它与普通的对象还是有区别的,因为它同时也是对象构造器,也就是说,可以new一个函数来返回一个对象。所有typeof返回“function”的对象都是函数对象。也称这样的对象为构造器(constructor),因而,所有的构造器都是对象,但不是所有的对象都是构造器。


可以通过object.constructor
属性来获得构造函数。

:
var o = new Object();
alert(typeof(o));
alert(o.constructor);

typeof(o)返回的是object
o.constructor返回的是
function Ojbect(){
      
[native code]

}
这说明Object本身就是通过function
定义的一个函数对象,而函数对象可以构造对象,即new
了一个函数对象Object
,构造了对象o

ArrayDate
等都是同样的。

Function对象却不一样
var f = new Function();
alert(typeof(f));
alert(f.constructor);
我们看到typeof(f)返回的是function,而不是object
f.constructor返回的是
function Function(){
[native code]
}
从上面可以看出new一个Function实际上是返回一个函数对象,而函数对象可以构造对象。我们再来看下面这个例子。
var f = new Function("x", "y", "this.X=x; this.Y=y;");
var point = new f(5,6);
alert(typeof(point));
alert(point.constructor);
alert(point.X);

我们看到typeof(point)弹出的是object
point.constructor弹出的是:
function anonymous(x, y){
this.X=x;
this.Y=y;
}
这种写法看起来有点变扭,但是细细梳理,其实并不难理解。
首先var f = new Function("x", "y", "this.X=x; this.Y=y;");
定义了一个函数对象f。这是匿名的函数对象,只是赋予了f,上面已经提到过。

而函数对象可以构造对象,var point = new f(5,6);
这里用函数对象f构造了一个新对象point,所以typeof(point)objectpoint.constructor返回的是构造器,我们可以叫它为point对象的构造函数,它是匿名的所以返回的函数名是anonymous,如果把上面var f = new Function("x", "y", "this.X=x; this.Y=y;");

这句改成
function f(x, y){this.X=x; this.Y=y;}这句,那么point.constructor返回的将是function f(x,y){this.X=x; this.Y=y;}。这里就不是
匿名函数了。

分享到:
评论

相关推荐

    深入理解JavaScript系列

    深入理解JavaScript系列(9):根本没有“JSON对象”这回事! 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇) 深入理解JavaScript系列(11):执行上下文(Execution Contexts) 深入理解...

    深入理解JavaScript系列(.chm)

    深入理解JavaScript系列(9):根本没有“JSON对象”这回事 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇) 深入理解JavaScript系列(11):执行上下文(Execution Contexts) 深入理解...

    深入剖析JavaScript面向对象编程

    Javascript 面向对象编程:构造函数的继承 本节主要介绍,如何生成一个”继承”多个对象的实例。 比如,现在有一个”动物”对象的构造函数, function Animal(){ this.species = "动物"; } 还有一个”猫”对象的...

    javascript function、指针及内置对象

    javascript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的。通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递。在继续讲述之前,先看一下函数的使用语法: ...

    深入浅析JavaScript中的Function类型

    Function是javascript里最常用的一个概念,javascript里的function是最容易入手的一个功能,但它也是javascript最难理解最难掌握的一个概念。 1. Function类型是js中引用类型之一,每个函数实际上都是Function类型的...

    javascript面向对象之对象的深入理解

    本文进一步分析讲述了javascript面向对象之对象的深入理解。分享给大家供大家参考。具体分析如下: javacript面向对象程序设计中,可以理解为一切都是对象。实例代码如下: 代码如下:[removed] function Cat(){ } ...

    深入浅析JavaScript面向对象和原型函数

    对象,是javascript中非常重要的一个梗,是否能透彻的理解它直接关系到你对整个javascript体系的基础理解,说白了,javascript就是一群对象在搅。。(哔!)。 下面给大家介绍下常用的几种对象创建模式 使用new...

    深入领悟JavaScript中的面向对象

    还有一种,称为“方法对象”,就是我们通常定义的 function。你可能觉得奇怪:方法就是方法,怎么成了对象了?但是在 JavaScript 中,方法的确是被当成对象来处理的。下面是一个简单的例子: 代码如下: function ...

    深入理解JavaScript创建对象的多种方式以及优缺点

    写在前面 这篇文章讲解创建对象的各种方式,以及优缺点。 但是注意: 这篇文章更像是笔记,因为《JavaScript高级程序设计》写得真是太好了!...缺点:对象无法识别,因为所有的实例都指向一个原型 2. 构造函数模式

    理解javascript对象继承

    先从一个问题进行研究深入,什么是javascript对象继承? 比如我们有一个“动物”对象的构造函数。 function animal() { this.type = '动物'; } 还有一个“猫”对象的构造函数。 function cat(name,color) { ...

    javascript面向对象快速入门实例

    本文深入浅出的讲述了javascript面向对象快速入门实例。分享给大家供大家参考。具体如下: javascript面向对象入门案例: 代码如下:[removed] function Cat(){//js中对象的定义与函数一样,不同点在于怎么样调用。 ...

    JavaScript this 深入理解

    函数调用者与所有者 JavaScript 中函数(function) 存在调用者 与 所有者这两个概念,调用者是指调用函数的对象,通常是一个指向调用了当前函数的函数的引用,如果是顶层调用,那么caller=null, 大部分浏览器的...

    理解Javascript_08_函数对象

    函数对象 首先,大家得明确一个概念:函数... 注:Function对象本身也是一个函数,因此它也一个函数对象。关于Function的深入理解,请见后续博文。 正面我们来看一段代码: 代码如下: //定义方式一 function func(x)

    深入理解(function(){… })();

     Function对象是JavaScript里面的固有对象,所有的函数实际上都是一个Function对象。 我们先看看,Function对象能不能直接运 用构造函数创建一个新的函数呢?答案是肯定的。 var abc = new Function(x,y,return x*...

    JavaScript内核系列

    在JavaScript中“一切皆对象”,在这一方面,它比其他的OO语言来的更 为彻底,即使作为代码本身载体的function,也是对象,数据与代码的界限在JavaScript中已经相当模糊。虽然它被广泛的应用在WEB客户 端,但是其...

    深入理解JavaScript 函数

    2.method 是面向对象中的概念,一般与类或对象成对出现 关系 1.对象的属性可以是任意类型 2.对象的属性如果是函数类型,它就叫做这个对象的方法 3.所以方法的本质还是函数 函数的调用 1.fun() 2.obj.fun() 3.fun...

    JavaScript深入之创建对象的多种方式以及优缺点

     这篇文章更像是笔记,因为《JavaScript高级程序设计》写得真是太好了!  1. 工厂模式  function createPerson(name) {  var o = new Object();  o.name = name;  o.getName = function () {  console....

    深入浅析JavaScript中的arguments对象(强力推荐)

    1、在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。arguments非常类似Array,但实际上又不是一个Array实例。可以通过如下代码得以证实(当然,实际上,在函数funcArg中,调用...

    深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解

    1、JavaScript中定义函数有2钟方法:  1-1.函数声明: 代码如下:function funcName(arg1,arg2,arg3){ //函数体} ①name属性:可读取函数名。非标准,浏览器支持:FF、Chrome、safari、Opera。 ②函数声明提升:指...

    深入理解JavaScript系列(49):Function模式(上篇)

    本篇主要是介绍Function方面使用的一些技巧(上篇),利用Function特性可以编写出很多非常有意思的代码,本篇主要包括:回调模式、配置对象、返回函数、分布程序、柯里化(Currying)。 回调函数 在JavaScript中,当...

Global site tag (gtag.js) - Google Analytics