79 lines
2.2 KiB
JavaScript
79 lines
2.2 KiB
JavaScript
"use strict";
|
|
/*
|
|
Copyright (c) 2014, Yahoo! Inc. All rights reserved.
|
|
Copyrights licensed under the New BSD License.
|
|
See the accompanying LICENSE file for terms.
|
|
*/
|
|
|
|
/* jslint esnext: true */
|
|
|
|
// Function.prototype.bind implementation from Mozilla Developer Network:
|
|
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Polyfill
|
|
|
|
var bind = Function.prototype.bind || function (oThis) {
|
|
if (typeof this !== 'function') {
|
|
// closest thing possible to the ECMAScript 5
|
|
// internal IsCallable function
|
|
throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
|
|
}
|
|
|
|
var aArgs = Array.prototype.slice.call(arguments, 1),
|
|
fToBind = this,
|
|
fNOP = function() {},
|
|
fBound = function() {
|
|
return fToBind.apply(this instanceof fNOP
|
|
? this
|
|
: oThis,
|
|
aArgs.concat(Array.prototype.slice.call(arguments)));
|
|
};
|
|
|
|
if (this.prototype) {
|
|
// native functions don't have a prototype
|
|
fNOP.prototype = this.prototype;
|
|
}
|
|
fBound.prototype = new fNOP();
|
|
|
|
return fBound;
|
|
};
|
|
|
|
// Purposely using the same implementation as the Intl.js `Intl` polyfill.
|
|
// Copyright 2013 Andy Earnshaw, MIT License
|
|
|
|
var hop = Object.prototype.hasOwnProperty;
|
|
|
|
var realDefineProp = (function () {
|
|
try { return !!Object.defineProperty({}, 'a', {}); }
|
|
catch (e) { return false; }
|
|
})();
|
|
|
|
var es3 = !realDefineProp && !Object.prototype.__defineGetter__;
|
|
|
|
var defineProperty = realDefineProp ? Object.defineProperty :
|
|
function (obj, name, desc) {
|
|
|
|
if ('get' in desc && obj.__defineGetter__) {
|
|
obj.__defineGetter__(name, desc.get);
|
|
} else if (!hop.call(obj, name) || 'value' in desc) {
|
|
obj[name] = desc.value;
|
|
}
|
|
};
|
|
|
|
var objCreate = Object.create || function (proto, props) {
|
|
var obj, k;
|
|
|
|
function F() {}
|
|
F.prototype = proto;
|
|
obj = new F();
|
|
|
|
for (k in props) {
|
|
if (hop.call(props, k)) {
|
|
defineProperty(obj, k, props[k]);
|
|
}
|
|
}
|
|
|
|
return obj;
|
|
};
|
|
|
|
exports.bind = bind, exports.defineProperty = defineProperty, exports.objCreate = objCreate;
|
|
|
|
//# sourceMappingURL=es5.js.map
|