length

形参的个数

  1. function func1() {}
  2. function func2(a, b) {}
  3. console.log(func1.length) // 0
  4. console.log(func2.length) // 2

方法

apply() 调用一个具有给定this 值的函数,以及作为一个数组(或类数组)提供的参数

  1. func.apply(thisArg, [argsArray])
  2. // 用apply将数组添加到另一个数组
  3. let array = ['a', 'b']
  4. let elements = [0, 1, 2]
  5. array.push.apply(array, elements)
  6. console.log(array) // ['a', 'b', 0, 1, 2]
  7. // 使用apply和内置函数 【找到数组中的最大/最小值】
  8. let max = Math.max.apply(null, elements)
  9. let min = Math.min.apply(null, elements)
  10. console.log(max) // 0
  11. console.log(min) // 2

call() 使用一个指定的this值和单独给出的一个或多个参数来调用一个函数

  1. function Product(name, price) {
  2. this.name = name
  3. this.price = price
  4. }
  5. function Food(name, price) {
  6. Product.call(this, name, price)
  7. this.category = 'food'
  8. }
  9. let cheese = new Food('feta', 5) // {name: 'feta', price: 5, category: 'food'}
  1. // 调用匿名函数
  2. var animals = [
  3. { species: 'Lion', name: 'King' },
  4. { species: 'Whale', name: 'Fail' }
  5. ];
  6. for (var i = 0; i < animals.length; i++) {
  7. (function(i) {
  8. this.print = function() {
  9. console.log('#' + i + ' ' + this.species + ': ' + this.name)
  10. }
  11. this.print()
  12. }).call(animals[i], i)
  13. }
  1. // 不指定第一个参数, this 就绑定全局对象
  2. var sData = 'Wisen'
  3. function display() {
  4. console.log('sData value is %s ', this.sData)
  5. }
  6. display.call(); // sData value is Wisen

bind() 绑定方法

  1. // 创建绑定函数
  2. this.x = 9
  3. let module = {
  4. x: 81,
  5. getX: function() {
  6. return this.x
  7. }
  8. }
  9. module.getX() // 81
  10. let retrieveX = module.getX
  11. retrieveX(); // 9
  12. let boundGetX = retrieveX.bind(module)
  13. boundGetX(); // 81
  1. // 偏函数 =》 拥有预设的初始参数
  2. function list() {
  3. return Array.prototype.slice.call(arguments)
  4. }
  5. function addArguments(arg1, arg2) {
  6. return arg1 + arg2
  7. }
  8. let leadList = list.bind(null, 37)
  9. let leadAdd = addArguments(null, 37)
  10. leadList() // [37]
  11. leadList(1, 2, 3) [37, 1, 2, 3]
  12. leadAdd(5) // 37 + 5 = 42
  13. leadAdd(5, 10) // 37 + 5 = 42
  1. // 配合setTimeout使用 this => window 对象
  2. function LateBloomer() {
  3. this.petalCount = Math.ceil(Math.random() * 12) + 1
  4. }
  5. LateBloomer.prototype.bloom = function() {
  6. window.setTimeout(this.declare.bind(this), 1000)
  7. }
  8. LateBloomer.prototype.declare = function() {
  9. console.log('I am a beautiful flower with ' + this.petalCount + ' petals!')
  10. }
  11. let flower = new LateBloomer()
  12. flower.bloom() // 一秒钟后,调用‘declare’ 方法
  1. // 绑定构造函数
  2. function Point(x, y) {
  3. this.x = x
  4. this.y = y
  5. }
  6. Point.prototype.toString = function() {
  7. return this.x + ' ' + this.y
  8. }
  9. let p = new Point(1, 2)
  10. p.toString() // '1, 2'
  11. let emptyObj = {}
  12. let YaxisPoint = Point.bind(null, 0)
  13. let axisPoint = new YaxisPoint(5)
  14. axisPoint.toString()