`
you_java
  • 浏览: 96281 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JavaScript Function 对象(类)

    博客分类:
  • JS
阅读更多

 

JavaScript 最令人感兴趣的可能莫过于函数实际上是功能完整的对象。

Function 类可以表示开发者定义的任何函数。

用 Function 类直接创建函数的语法如下:

var function_name = new function(arg1, arg2, ..., argN, function_body)

在上面的形式中,每个 arg 都是一个参数,最后一个参数是函数主体(要执行的代码)。这些参数必须是字符串。

记得下面这个函数吗?

function sayHi(sName, sMessage) {
  alert("Hello " + sName + sMessage);
}

还可以这样定义它:

var sayHi 
= 
new Function("sName", "sMessage", "alert(\"Hello \" + sName + sMessage);");

虽然由于字符串的关系,这种形式写起来有些困难,但有助于理解函数只不过是一种引用类型,它们的行为与用 Function 类明确创建的函数行为是相同的。

请看下面这个例子:

function doAdd(iNum) {
  alert(iNum + 20);
}

function doAdd(iNum) {
  alert(iNum + 10);
}

doAdd(10);	//输出 "20"

如你所知,第二个函数重载了第一个函数,使 doAdd(10) 输出了 "20",而不是 "30"。

如果以下面的形式重写该代码块,这个概念就清楚了:

var doAdd = new Function("iNum", "alert(iNum + 20)");
var doAdd = new Function("iNum", "alert(iNum + 10)");
doAdd(10);

请观察这段代码,很显然,doAdd 的值被改成了指向不同对象的指针。函数名只是指向函数对象的引用值,行为就像其他对象一样。甚至可以使两个变量指向同一个函数:

var doAdd = new Function("iNum", "alert(iNum + 10)");
var alsodoAdd = doAdd;
doAdd(10);	//输出 "20"
alsodoAdd(10);	//输出 "20"

在这里,变量 doAdd 被定义为函数,然后 alsodoAdd 被声明为指向同一个函数的指针。用这两个变量都可以执行该函数的代码,并输出相同的结果 - "20"。因此,如果函数名只是指向函数的变量,那么可以把函数作为参数传递给另一个函数吗?回答是肯定的!

function callAnotherFunc(fnFunction, vArgument) {
  fnFunction(vArgument);
}

var doAdd = new Function("iNum", "alert(iNum + 10)");

callAnotherFunc(doAdd, 10);	//输出 "20"

在上面的例子中,callAnotherFunc() 有两个参数 - 要调用的函数和传递给该函数的参数。这段代码把 doAdd() 传递给 callAnotherFunc() 函数,参数是 10,输出 "20"。

注意:尽管可以使用 Function 构造函数创建函数,但最好不要使用它,因为用它定义函数比用传统方式要慢得多。不过,所有函数都应看作 Function 类的实例。

分享到:
评论

相关推荐

    Javascript面向对象编程.

    4. **类(Class)**:ES6引入了类语法糖,使得JavaScript的面向对象更加符合传统面向对象语言的写法,但实际上,这些“类”仍然基于原型实现。 ```javascript class Person { constructor(name) { this.name = ...

    Javascript面向对象编程

    通过上述介绍,可以看出JavaScript虽然不像传统意义上的面向对象语言那样提供明确的类和对象概念,但它仍然支持面向对象编程的基本思想。利用`function`作为类的定义、`new`操作符创建对象、以及`this`和`prototype`...

    Javascript 面向对象的JavaScript进阶

    在面向对象的JavaScript中,类的成员可以根据它们与类和对象的关系分为“类成员”和“实例成员”。 ##### 8.2.1 实例属性和实例方法 **定义:** 实例成员包括实例属性和实例方法。每个对象实例都有自己的实例属性...

    JAVASCRIPT 面向对象编程精要

    JavaScript是一种基于原型的语言,这意味着它不像传统的面向对象语言(如Java或C++)那样拥有类的概念。在JavaScript中,对象是核心,一切都可以视为对象。JavaScript的对象是动态的,即可以在运行时添加或删除属性...

    JavaScript核心对象参考手册

    3. **函数对象Function**: 在JavaScript中,函数是第一类对象,可以作为变量、参数和返回值。`Function.prototype`提供了`call`和`apply`方法,用于改变函数调用时的上下文。 4. **数组Array**: `Array`对象提供了...

    javascript创建对象的方式(二)

    在JavaScript中,创建对象是编程的基本操作之一,它支持多种方式来实现这一目的。这篇博客“javascript创建对象的方式(二)”可能详细介绍了在JavaScript中除了最基础的字面量语法之外的其他创建对象的方法。这里...

    JavaScript面向对象编程指南

    4. 类(ES6):虽然JavaScript早期版本没有内置的类机制,但从ES6开始,引入了类语法,使得代码更加符合传统的面向对象编程风格。类实际上是一个函数,可以有构造方法、继承等特性: ```javascript class Person { ...

    JavaScript面向对象精要(英文版)

    在JavaScript中,虽然它不是一种传统的类(class-based)面向对象语言,但它通过原型继承机制实现了强大的面向对象功能。 ##### 2.1 封装 封装是指将对象的状态信息隐藏在内部,仅通过公共接口与外部进行交互。在...

    JavaScript面向对象基础.ppt

    在JavaScript中,面向对象编程(OOP)是其核心概念之一,允许开发者通过类和对象来组织和管理代码,提高代码的可重用性和可维护性。 8.1 面向对象术语 面向对象编程的基础包括类、对象、继承和多态等概念。类是对象...

    理解Javascript Function与Object

    所有的对象都将继承Object的原型,包括Function对象。 例如,下面的代码: ``` function Foo() {}; var foo = new Foo(); alert(foo instanceof Foo); // true alert(foo instanceof Function); // false alert(foo...

    JavaScript面向对象编程指南 pdf

    面向对象编程(Object-Oriented Programming,OOP)是JavaScript中的一个重要概念,它允许开发者以更加模块化、可复用的方式组织代码。下面将详细探讨JavaScript面向对象编程的基本原理、特性以及实际应用。 1. **...

    javascript面向对象

    本文旨在深入解析JavaScript面向对象编程的基础,包括对象的基本概念、类与对象的关系、对象的属性与方法、封装、继承与多态,以及JavaScript中对象的实现方式。 #### 对象的基本概念 面向对象编程的核心在于对...

    JavaScript面向对象编程指南.pdf

    9. ES6新特性:随着ECMAScript 6(ES6)的发布,JavaScript引入了许多新特性,如类(class)、模块(module)、箭头函数(arrow function)等,这些都丰富了面向对象编程的能力。 通过以上内容,我们可以了解到...

    JavaScript 面向对象编程详细讲解文档

    JavaScript是一种动态类型的脚本语言,虽然它不像Java或C#那样拥有传统的类和实例机制,但它的面向对象编程能力仍然非常强大。JavaScript的核心在于对象、原型和隐式继承,这些都是理解其面向对象特性的重要概念。 ...

    面向对象JavaScript开发

    1. **构造函数**:构造函数在JavaScript中扮演着类的角色,它们通常用来初始化新创建的对象。我们可以通过`new`关键字调用构造函数来创建实例。例如: ```javascript function Person(name) { this.name = name; } ...

    javascript面向对象编程指南 2nd

    javascript面向对象编程指南 2nd英文版,英文名:Object-Oriented JavaScript。 What you will learn from this book The basics of object-oriented programming, and how to apply it in the JavaScript ...

    javascript面向对象要点总结

    `arguments`是一个类数组对象,用于收集函数的所有参数。它可以在函数内部访问,即使没有明确列出参数名称。 ```javascript function sum() { var s = 0; for (var i = 0; i ; i++) { s += arguments[i]; } ...

    第15章 javascript面向对象与原型

    在JavaScript中,面向对象编程(OOP)的概念虽然存在,但是它的实现与传统基于类的语言有所不同。ECMAScript,也就是JavaScript的语言规范,支持两种开发模式:函数式(过程化)和面向对象(OOP)。面向对象编程语言...

Global site tag (gtag.js) - Google Analytics