You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.2 KiB
80 lines
2.2 KiB
/* |
|
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 |
|
|
|
"use strict"; |
|
|
|
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
|