1 changed files with 76 additions and 0 deletions
@ -0,0 +1,76 @@
|
||||
/* |
||||
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; |
||||
}; |
||||
|
||||
export {bind, defineProperty, objCreate}; |
||||
Loading…
Reference in new issue