Function.prototype.call or apply

1. 简介与语法

apply

1. 语法
fun.apply(thisArg[, argsArray])

2. 参数
thisArg
The value of this provided for the call to fun. Note that this may not be the actual value seen by the method: if the method is a function in non-strict mode code, null and undefined will be replaced with the global object, and primitive values will be boxed.
argsArray
An array like object, specifying the arguments with which fun should be called, or null or undefined if no arguments should be provided to the function.

3. 简介
Calls a function with a given this value and arguments provided as an array (or an array like object).

NOTE: While the syntax of this function is almost identical to that of call(), the fundamental difference is that call() accepts an argument list, while apply() accepts a single array of arguments.

call

与apply类似,只是第第二个参数不一样
fun.call(thisArg[, arg1[, arg2[, ...]]])

2.demo


2.1 构造方法
function Product(name, price) {
  this.name = name;
  this.price = price;
}
 
function Food(name, price) {
  Product.call(this, name, price);
  this.category = 'food';
}
// 用于instanceof的时候判断是true
//Food.prototype = new Product();
 
function Toy(name, price) {
  Product.apply(this, arguments);
  this.category = 'toy';
}
Toy.prototype = new Product();
 
var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);


如下图:

Function.prototype.call or apply

2.2 匿名函数
var animals = [
  {species: 'Lion', name: 'King'},
  {species: 'Whale', name: 'Fail'}
];
 
for (var i = 0; i < animals.length; i++) {
  (function (i) { 
    this.print = function () { 
      console.log('#' + i  + ' ' + this.species + ': ' + this.name); 
    } 
    this.print();
  }).call(animals[i], i);
}


2.3 调用自身
/* min/max number in an array */
var numbers = [5, 6, 2, 3, 7];
 
/* using Math.min/Math.max apply */
var max = Math.max.apply(null, numbers); /* This about equal to Math.max(numbers[0], ...) or Math.max(5, 6, ..) */
var min = Math.min.apply(null, numbers);

你可能感兴趣的:(prototype)