06_JS面向对象

创建函数的几种方式


函数的构造函数Function

在 js 中 使用Function可以实例化函数对象。也就是说在 js 中函数与普通对象一样, 也是一个对象类型. 函数是 js 中的一等公民.

  • 函数是对象, 就可以使用对象的动态特性
  • 函数是对象, 就有构造函数创建函数
  • 函数是函数, 可以创建其他对象
  • 函数是唯一可以限定变量作用域的结构

要解决的问题

  • Function 如何使用
  • Function 与函数的关系
  • 函数的原型链结构

Function 的使用

语法

//Function函数所有的参数全都是字符串
//Function函数的作用就是将所有的参数组合起来,变成一个函数
//1、如果只传一个参数,那么这个函数必然是函数体
//2、如果传多个参数,那么最后一个参数表示函数体,前面的参数代表将要创建的函数的参数
//3、如果不传参数,表示创建一个空函数
new Function(arg1, arg2, arg3, ..., argN, body);
创建一个打印一句话的函数
//传统的方式
function foo(){
    console.log("你好");
}
//使用Function
var func = new Function("console.log('你好');");

这里两种方式创建出来的函数功能是一样的。

创建一个空函数
//传统的方式
function foo(){}
//Function
var func = new Function();
创建一个有参数的函数
//传统的方式
function foo(num){
    console.log(num);
}

//Function

var func = new Function(){"num", "console.log(num);"};

解决代码太长的问题

  • 利用字符串特性
function foo ( a, b, c ) {
    var res = a > b ? a : b;
    res = res > c ? res : c;
    return res;
}
var func = new Function( 'a', 'b', 'c', 'return foo( a, b, c );');
  • 利用+连接字符串
var func = new Function( 'a', 'b', 'c',

 'var res = a > b ? a : b;' +

 'res = res > c ? res : c;' +

 'return res;' );
  • ES6 语法(很少有浏览器实现) 使用键盘左上角的` 表示可换行字符串的界定符,之前我们用的是单引号或者双引号来表示一个字符串字面量,在ES6中可以用反引号来表示该字符串可换行。
  • (最终)利用 DOM 的特性完成该方法


练习(重点




arguments对象

在每一个函数调用的过程中, 函数代码体内有一个默认的对象arguments, 它存储着实际传入的所有参数。
  arguments是一个伪数组对象. 它表示在函数调用的过程中传入的所有参数的集合。在函数调用过程中不规定参数的个数与类型, 可以使得函数调用变得非常灵活性。

JavaScript中的函数并没有规定必须如何传参:

  • 定义函数的时候不写参数, 一样可以调用时传递参数
  • 定义的时候写了参数, 调用的时候可以不传参
  • 定义的时候写了一个参数, 调用的时候可以随意的传递多个而参数

在代码设计中, 如果需要函数带有任意个参数的时候, 一般就不带任何参数, 所有的参数利用arguments对象来获取. 一般的函数定义语法, 可以写成:

function foo ( /* ... */ ) {
}

练习


eval


静态成员和实例成员



你可能感兴趣的:(06_JS面向对象)