函数的四种调用模式

在 js 中 无论是函数, 还是方法, 还是事件, 还是构造器, ... 其本质都是函数. 只是处在不同的位子而已.

四种:

  1. 函数模式
  2. 方法模式
  3. 构造器模式
  4. 上下文模式

函数模式

特征: 就是一个简单的函数调用. 函数名的前面没有任何引导内容.

	function foo () {}
	var func = function () {};
	...
	
	foo();
	func();
	(function (){})();

this 的含义: 在 函数中 this 表示全局对象, 在浏览器中是 window

方法模式

特征: 方法一定是依附于一个对象, 将函数赋值给对象的一个属性, 那么就成为了方法.

	function f() {
		this.method = function () {};
	}
	var o = {
		method: function () {} 
	}

this 的含义: 这个依附的对象.

构造器调用模式

创建对象的时候 构造函数做了什么?

由于构造函数只是给 this 添加成员. 没有做其他事情. 而方法也可以完成这个操作, 就 this 而言,
构造函数与方法没有本质区别.

特征:

  1. 使用 new 关键字, 来引导构造函数.
  2. 构造函数中发 this 与方法中一样, 表示对象, 但是构造函数中的对象是刚刚创建出来的对象
  3. 构造函数中不需要 return, 就会默认的 return this

补充:

  1. 如果手动的添加 return, 就相当于 return this
  2. 如果手动的添加 return 基本类型; 无效, 还是保留原来 返回 this
  3. 如果手动添加 return null; 或 return undefiend, 无效
  4. 如果手动添加 return 对象类型; 那么原来创建的 this 就会被丢掉, 返回的是 return 后面的对象

创建对象的模式

  1. 工厂方法
	// 工厂就是用来生产的, 因此如果函数创建对象并返回, 就称该函数为工厂函数
	function createPerson( name, age, gender ) {
		var o = {};
		o.name = name;
		o.age = age;
		o.gender = gender;
		return o;
	}
	
	// document.createElement() 
  1. 构造方法
  2. 寄生式创建对象
	// 外表看起来就是构造方法, 但是本质不是的构造方法创建对象的方式
	function createPerson( name, age, gender ) {
		var o = {};
		o.name = name;
		o.age = age;
		o.gender = gender;
		return o;
	}
	var p = new createPerson( 'jim', 19, 'male' );
原文地址:https://www.cnblogs.com/sunzhenbing/p/5751460.html