1、构造函数方式
定义一个函数,然后实例化即可。
2、原型对象方式
这种方式真正的弊端是,如果原型对象中有一个引用类型的值,则修改其中一个实例对象,另一个也会修改。
3、混合方式定义
思路是:将函数类型的成员绑定到原型对象上,将其他值绑定到构造函数内部。
实际开发中,推荐使用这个方式。
4、动态混合方式
上面的混合方式,从功能和性能上已经没有问题了,但是从结构上看起来不像PHP中的类,所以希望将所有的成员属性和方法的代码都放到一个大括号中,所以才会出现下面的动态混合方式。
1、函数也是值
JavaScript 语言将函数看作一种 值,与其它值(数值、字符串、布尔值等等)地位相同。凡是可以使用值的地方,就能使用函数。比如,可以把函数赋值给变量和对象的属性,也可以当作参数传入其他函数,或者作为函数的结果返回。函数只是一个可以执行的值,此外并无特殊之处。
由于函数与其他数据类型地位平等,所以在 JavaScript 语言中又称函数为 第一等公民。
除此以外,还可以把函数当做返回值。
也可以把函数当做另外一个函数的参数,如果一个函数当做另一个函数的参数了,那么把函数类型的参数叫做回调函数。
2、函数也是对象
JS中处处皆对象,函数也不例外。
那么如何理解函数也是对象呢?这里主要要表达的是函数也可以使用对象那样的点语法。比如前面学习的Person.prototype;
比如在函数内部,可以使用“函数.length”来表示函数的形参个数,可以使用“函数.name”来获取当前的函数名。
3、arguments对象
arguments对象,存在于函数的内部,它能够表达函数的实际参数(实参),除此以外,arguments对象还有一个属性callee,它表示函数的名字,arguments的length属性表示实参的个数。
小例子:计算函数参数的和:
4、call、apply、bind函数
这三个函数都可以改变函数内部this的指向。
函数.call(需要指向的对象,参数1, 参数2…); 调用之后,会直接执行函数
函数.apply(需要指向的对象,[参数1, 参数2…]); 调用之后,会直接执行函数
函数.bind(需要指向的对象,参数1, 参数2…); 调用之后,不会执行函数。
call方法演示:
apply方法演示:
bind函数演示:
小例子,查找数组中的最大值:
在线文档:https://docs.qq.com/doc/DQWxicWdTd0ROWVdN