JavaScript Feature Reference: bind() Method Web Browser Support Test

Last reviewed/updated: 26 Jan 2018 | Published: 14 Dec 2017 | Status: Active
Web browser support: Internet Explorer 10+, Edge 12+, Firefox 6+, Chrome 30+, Opera 17+

1. Introduction

In this web page there are two web browser JavaScript feature support tests; 1.) a feature implementation test, and 2.) a feature capability test. First, the implementation test is run. The implementation test determines if the web browser recognizes the JavaScript bind() method. The implementation test is a simple test for the presence of web browser support, and a definitive test for the absence of web browser support. If the web browser does not recognize the JavaScript bind() method, the testing is stopped and the implementation test reports: Fail (no support): The web browser does not recognize the JavaScript bind() method. The web browser does not support the JavaScript bind() method.

If the web browser recognizes the JavaScript bind() method, the capability test is run. The capability test determines if the web browser's implementation of the JavaScript bind() method includes support for at least one bind() method capability. The capability test is a more definitive, albeit not an all inclusive, test for the presence of web browser support. If the web browser's implementation of the JavaScript bind() method includes support for the tested capability, the capability test reports: Pass (at least partial/possibly full support): The web browser recognizes the JavaScript bind() method, and supports at least one bind() method capability. The web browser at least partially/possibly fully supports the JavaScript bind() method. Positive determination of full web browser support is beyond the scope of this test. If the web browser's implementation of the JavaScript bind() method does not include support for the tested capability, the capability test reports: Pass/Fail (partial support): The web browser recognizes the JavaScript bind() method, but does not support at least one bind() method capability. The web browser partially supports the JavaScript bind() method.

The web browser support test source code is shown in Section 2.1. The web browser support test source code is run in Section 2.2, which shows the web browser support test result.

1.1. bind() Method Web Browser Support

Pass (at least partial/possibly full support): IE9+, ED12+, FF4+, SF5.1.4+, CH7+, OP11.60+.

1.2. Abbreviations

  • IE = Internet Explorer.
  • ED = Edge = EdgeHTML rendering engine (ED12+) and/or Edge browser (ED20+).
  • FF = Firefox.
  • SF = Safari.
  • CH = Chrome.
  • OP = Opera.

2. bind() Method Web Browser Support Test

2.1. Web Browser Support Test Source Code

<p id='testId'><b>Fail</b> (no support): The web browser does not recognize the JavaScript <code>bind()</code> method. The web browser does not support the JavaScript <code>bind()</code> method.</p><!-- Hard code Fail because web browser no support error stops JavaScript execution. -->

<script>
propertyOne = "window object propertyOne value"; // Identical to window.propertyOne = "window object propertyOne value";.
var objectLiteral = {
 propertyOne: "objectLiteral propertyOne value"
}
function functionDeclaration(){
 return "Function declaration return " + this.propertyOne + ".";
}
var functionExpression = function(){
 return "Function expression return " + this.propertyOne + ".";
};
function functionDeclarationWithParam(param){
 return "Function declaration with param return " + this.propertyOne + " with " + param + ".";
}
var functionExpressionWithParam = function(param){
 return "Function expression with param return " + this.propertyOne + " with " + param + ".";
};
var callFunctionDeclaration = functionDeclaration(); // "Function declaration return window object propertyOne value." For comparison. Not part of test.
var callFunctionExpression = functionExpression(); // "Function expression return window object propertyOne value." For comparison. Not part of test.
var boundFunctionDeclaration = functionDeclaration.bind(objectLiteral);
var callBoundFunctionDeclaration = boundFunctionDeclaration(); // "Function declaration return objectLiteral propertyOne value."
var boundFunctionExpression = functionExpression.bind(objectLiteral);
var callBoundFunctionExpression = boundFunctionExpression(); // "Function expression return objectLiteral propertyOne value."
var boundFunctionDeclarationWithParamOne = functionDeclarationWithParam.bind(objectLiteral);
var callBoundFunctionDeclarationWithParamOne = boundFunctionDeclarationWithParamOne("passed value"); // "Function declaration with param return objectLiteral propertyOne value with passed value."
var boundFunctionDeclarationWithParamTwo = functionDeclarationWithParam.bind(objectLiteral, "passed value"); // Bind param to "passed value". Therefore, can call bound function without argument (see next line).
var callBoundFunctionDeclarationWithParamTwo = boundFunctionDeclarationWithParamTwo(); // "Function declaration with param return objectLiteral propertyOne value with passed value."
var boundFunctionExpressionWithParamOne = functionExpressionWithParam.bind(objectLiteral);
var callBoundFunctionExpressionWithParamOne = boundFunctionExpressionWithParamOne("passed value"); // "Function expression with param return objectLiteral propertyOne value with passed value."
var boundFunctionExpressionWithParamTwo = functionExpressionWithParam.bind(objectLiteral, "passed value"); // Bind param to "passed value". Therefore, can call bound function without argument (see next line).
var callBoundFunctionExpressionWithParamTwo = boundFunctionExpressionWithParamTwo(); // "Function expression with param return objectLiteral propertyOne value with passed value."
function returnArray(){
 return Array.prototype.slice.call(arguments);
}
var callReturnArray = returnArray(1, 2, 3); // Array [1, 2, 3]. For comparison. Not part of test.
var boundReturnArray = returnArray.bind(null, 10, 11, 12); // Bind arguments object to passed values. Therefore, can call bound function without arguments (see next line).
var callBoundReturnArrayOne = boundReturnArray(); // Array [10, 11, 12].
var callBoundReturnArrayTwo = boundReturnArray(13, 14, 15); // Array [10, 11, 12, 13, 14, 15]. Arguments to bound function added to arguments object after those specified in bind() method statement.
if ((functionDeclaration.bind) && (functionExpression.bind)){
 var element = document.getElementById("testId");
 if ((typeof boundFunctionDeclaration === "function") && boundFunctionDeclaration instanceof Function && (typeof boundFunctionExpression === "function") && boundFunctionExpression instanceof Function && (callBoundFunctionDeclaration === "Function declaration return objectLiteral propertyOne value.") && (callBoundFunctionExpression === "Function expression return objectLiteral propertyOne value.") && (callBoundFunctionDeclarationWithParamOne === "Function declaration with param return objectLiteral propertyOne value with passed value.") && (callBoundFunctionDeclarationWithParamTwo === "Function declaration with param return objectLiteral propertyOne value with passed value.") && (callBoundFunctionExpressionWithParamOne === "Function expression with param return objectLiteral propertyOne value with passed value.") && (callBoundFunctionExpressionWithParamTwo === "Function expression with param return objectLiteral propertyOne value with passed value.") && (callBoundReturnArrayOne.toString() === "10,11,12") && (callBoundReturnArrayTwo.toString() === "10,11,12,13,14,15")){
  element.innerHTML = "<b>Pass</b> (at least partial/possibly full support): The web browser recognizes the JavaScript <code>bind()</code> method, and supports at least one <code>bind()</code> method capability. The web browser at least partially/possibly fully supports the JavaScript <code>bind()</code> method. Positive determination of full web browser support is beyond the scope of this test.";
 } else {
  element.innerHTML = "<b>Pass/Fail</b> (partial support): The web browser recognizes the JavaScript <code>bind()</code> method, but does not support at least one <code>bind()</code> method capability. The web browser partially supports the JavaScript <code>bind()</code> method.";
 }
}
</script>

2.2. Web Browser Support Test Result

Fail (no support): The web browser does not recognize the JavaScript bind() method. The web browser does not support the JavaScript bind() method.


3. Resources And Additional Information