JavaScript面向对象之Function类型
下面是我对Function类型的总结,希望对您有帮助。
“函数式编程"是一种"编程范式”(programming paradigm),也就是如何编写程序的方法论。
1、Function与函数
函数是这样的一段JavaScript代码,它只定义一次,但可能被执行或调用多次。
Function类型是JavaScript提供的引用类型之一,JS可以通过Function类型创建Function对象。
在JavaScript中,每一个函数都可以以对象的形式存在(无论用哪种方式定义的函数,最终他的类型都可以是Object类型,因为JS中所有对象的父级都是Object,函数的父级也是Object类型,所以函数也是Object类型)。这个对象具体来说就是Function类型的。
即:每一个函数都是一个Function类型的对象。
每个函数都是一个Function对象。函数名,本质就是一个变量名,是指向某个Function对象的引用。
function fn(){
console.log('卧龙学苑');
}
console.log(fn instanceof Function);// true
实例:
// 1.函数声明方式创建函数 (如果重名不会发生覆盖)
function fn(){
console.log('this is fn function');
}
// 2.自变量方式创建函数 (如果重名会发生覆盖)
var f = function(){
console.log('this is f function');
}
// 函数其实是一个对象
console.log(fn instanceof Object); // true
console.log(f instanceof Object); // true
// 函数是Function类型的对象
console.log(fn instanceof Function); // true
console.log(f instanceof Function); // true
// Function类型是JS中的一个引用类型
// 引用类型的特点:底层就是一个构造函数
// 可以利用Function类型创建对象
var fun = new Function();
// (反推)对象fun就是一个函数
fun();
// 函数fun不具有函数体、参数和return语句
console.log(fun);
/*
3.使用Function类型创建一个函数对象时
var 函数名 = new Function(args,statment);
* 参数
* args - 字符串类型,表示当前创建函数的形参
* 如果是多个形参的话,中间使用逗号分隔
* statement - 字符串类型,表示当前创建函数的函数体
* 问题 - 函数的函数体定义可读性降低
*/
var fun = new Function('console.log("this is function")');
// 函数体
fun();
var fun = new Function('a','console.log("this is " + a)')
// a 是形参 //函数体
fun(100); // this is 100
var fun = new Function('a,b','console.log("this is " + a + b)')
// a 是形参 //函数体
fun(100,200); // this is 100200
2、Function与Object
Function和Object既是自身类型的对象,也是对方类型的对象
// 一
/*
1.Function类型是JavaScript中的引用类型之一
2.引用类型都可以当作是一个构造函数
3.构造函数也是函数的一种
4.函数其实是一个Function类型的对象
由已知条件1,4推出 第5条
5.Function类型是一个Function类型的对象
*/
console.log(Function instanceof Function); // true
// 对象 //类型
// 二
/*
1.Function类型是JavaScript中的引用类型之一
2.引用类型都可以当作是一个构造函数
3.构造函数也是函数的一种
4.函数其实是一个Function类型的 "对象" (由对象引出第5条)
5.JavaScript中所有对象都是Object类型的
*/
console.log(Function instanceof Object); //true
// 综上 一、二
// Function既是Function类型,也是Object类型
// 三、
/*
1.Object类型是JavaScript中的引用类型之一
2.引用类型都可以当作是一个构造函数
3.构造函数也是函数的一种
4.函数其实是一个Function类型的对象
由已知条件1,4 推出
5.Object类型是一个Function类型的对象
*/
console.log(Object instanceof Function); // true
// 四、
/*
1.Object类型是JavaScript中的引用类型之一
2.引用类型都可以当作是一个构造函数
3.构造函数也是函数的一种
4.函数其实是一个Function类型的对象
5.JavaScript中所有对象都是Object类型的
由已知条件1,5 推出:
6.Object类型是Object类型的 (Object是自身类型的对象)
*/
console.log(Object instanceof Object); //true
/*
综上一、二、三、四
Function和Object既是自身类型的对象,也是对方类型的对象
*/
3、自定义创建构造函数
构造函数(右称为对象模板/构造器)
-
作用
用于创建JavaScript对象
-
方式
- JavaScript提供的构造函数 - 引用类型
- 自定义创建构造函数
-
构造函数与函数
-
相同点
-
语法结构是相同的
-
不同点
- 函数 -> 函数体(局部变量和函数)
- 构造函数 -> 属性和方法
/*
构造函数(右称为对象模板/构造器)
* 作用 - 用于创建JavaScript对象
* 方式
1.JavaScript提供的构造函数 - 引用类型
2.自定义创建构造函数
*/
/*
// 1.函数声明方式创建构造函数
function Hero(){
// 定义属性
this.name = "张无忌";
// 定义方法
this.sayMe = function(){
console.log("this is function");
}
}
// 利用Hero构造函数创建对象 -> 当前对象是Hero类型的
var hero = new Hero();
console.log(hero); // Hero { name: '张无忌', sayMe: [Function] }
*/
// 2.自变量方式创建构造函数
var Hero = function(name){
// 定义属性
this.name = name;
// 定义方法
this.sayMe = function(){
console.log("this is function");
}
}
// 利用Hero构造函数创建对象 -> 当前对象是Hero类型的
var hero = new Hero("张无忌");
console.log(hero); // Hero { name: '张无忌', sayMe: [Function] }
// 3.初始化器方式创建的时候所有的信息都要确定下来
var hero2 = {
name : '张无忌'
}
/*
构造函数与函数
* 相同点
* 语法结构是相同的
* 不同点
* 函数 -> 函数体(局部变量和函数)
* 构造函数 -> 属性和方法
*/
如果有不足,请大神指教,谢谢