Bản dịch này chưa hoàn thành. Xin hãy giúp dịch bài viết này từ tiếng Anh.

Phương thức call() gọi một hàm với giá trị của this và các đối số riêng lẻ.

Chú ý: Mặc dù hàm này có cú pháp gần giống với hàm apply() nhưng có sự khác biệt cơ bản. Hàm call() nhận nhiều đối số riêng lẻ, còn hàm apply() nhận một mảng tập hợp của nhiều đối  số.

Cú Pháp

function.call(thisArg, arg1, arg2, ...)

Tham số

thisArg
Giá trị của this được đưa ra để gọi hàm. Lưu ý rằng this có thể không phải ?là giá trị thực tế được thấy bởi phương thức: Nếu phương thức là một hàm trong non-strict mode , giá trị nullundefined sẽ được thay thế với global object và các giá trị sơ khai (primitive) sẽ được chuyển thành các đối tượng (objects).
arg1, arg2, ...
Các đối số cho hàm.

Giá tr?i trả về

Kết quả của của việc gọi hàm với giá trị xác định của this và các đối số.

Miêu tả

Một đối tượng this có thể được chỉ định khi gọi một hàm có sẵn. this đề cập đến đối tượng hiện tại (current object), là đối tượng đang gọi (calling object). Với hàm call, bạn có thể viết một phương thức một lần duy nhất và sau đó thừa kế nó trong một đối tương khác mà không phải viết lại phương thức đó cho đối tượng mới.

Ví du

Sử dung call ?đê chain constructors cho một đối tượng

Bạn có thể sử dụng hàm call để chain constructors cho một đối tượng giống như trong Java?. Trong ví dụ dưới đây, hàm khởi tại của đối tượng Product được định nghĩa với 2 tham số, name ?và price. Hai hàm Food và Toy gọi Product với tham số this , name và price. Product khởi tạo thuộc tính name và price, cả 2 hàm này định nghĩa category.

function Product(name, price) {
  this.name = name;
  this.price = price;
}

function Food(name, price) {
  Product.call(this, name, price);
  this.category = 'food';
}

function Toy(name, price) {
  Product.call(this, name, price);
  this.category = 'toy';
}

var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);

 Sử dung hàm call để goi ?một hàm ẩn danh (anonymous function)

Trong ví dụ dưới đây, chúng ta tạo một hàm ẩn danh và sử dụng hàm call để gọi hàm đó ?nhận mọi đối tượng trong một mảng. Mục đích chính của hàm ẩn danh này là thêm tính năng hàm print cho mọi đối tượng, từ đó các đối tượng này có thể in ra vị trí của chúng trong mảng. Việc này có thể không cần thiết nhưng được đưa ra với mục đích ví dụ.

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);
}

 Sử dung hàm call để goi hàm và đưa ra một giá trịcho đối tượng 'this'

Trong ví dụ dưới đây? khi chúng ta gọi hàm greet , giá trị của this trong hàm greet chính là đối tượng i.

function greet() {
  var reply = [this.person, 'Is An Awesome', this.role].join(' ');
  console.log(reply);
}

var i = {
  person: 'Douglas Crockford', role: 'Javascript Developer'
};

greet.call(i); // Douglas Crockford Is An Awesome Javascript Developer

 Thông số kỹ thuật

Specification Status Comment
ECMAScript 1st Edition (ECMA-262) Standard Initial definition. Implemented in JavaScript 1.3.
ECMAScript 5.1 (ECMA-262)
The definition of 'Function.prototype.call' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Function.prototype.call' in that specification.
Standard  
ECMAScript Latest Draft (ECMA-262)
The definition of 'Function.prototype.call' in that specification.
Draft  

Tính tương thích với trình duyệt web

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidEdge MobileFirefox for AndroidOpera for AndroidiOS SafariSamsung InternetNode.js
Basic supportChrome Full support YesEdge Full support YesFirefox Full support 1IE Full support YesOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesEdge Mobile Full support YesFirefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes

Legend

Full support  
Full support

Xem thêm

Document Tags and Contributors

Những người đóng góp cho trang này: httrung91
Cập nhật lần cuối bởi: httrung91,