1 Должен ли SGUtils.isObj возвращать false на объект созданный конструктором?
function defaultOptions(){}
defaultOptions.prototype = {
constructor: defaultOptions
, option1: true
<...>
}
var options = SGUtils.ext(new defaultOptions, { option1: false } )
Сейчас SGUtils.isObj(options) == false, из-за проверки на конструктор. А для чего конструктор проверяется?
2 jQuery.isPlaneObject не слишком хороший пример определения объект это или нет. Вот у нас в common такое:
var _toString_ = Object.prototype.toString;
if(!Object.isObject)Object.isObject = function(object) {
return object
&& _toString_.call(object) === "[object Object]"
&& _toString_.call(object.constructor) === "[object Function]"
//DOM-objects in IE have _toString_.call(object.constructor) === "[object Object]"
;
};
Текущий вариант вернёт ложный результат в случае
SGUtils.isObj( { nodeType: 123 } )
Наш же вариант вернёт ложный результат в браузерах с нативной поддержкой Object.create в таком случае
Object.isObject( Object.create(null) ) == false;// :(
3 Полифил Function.prototype.bind из es5-shim выдаст ошибку в IE<9 при некоторых условиях, если в качестве this передавать DOM-объект
function(){}.bind(document.documentElement)
// может выдать exseption на строке
this instanceof emptyFn
//нужно ещё проверять, что это не DOM-объект
Object.isObject(this) && this instanceof emptyFn
4 В методах обхода по массиву не поддерживаются разряженные массивы:
a = [];
a[1] = 1;
a[10] = 10;
SGUtils.map(a, function(a){ return a + "1" }).join(",")
выдаст ",11,,,,,,,,,101" в нормальных браузерах и "undefined1,11,undefined1,undefined1,undefined1,undefined1,undefined1,undefined1,undefined1,undefined1,101" в старых IE
1 Должен ли SGUtils.isObj возвращать false на объект созданный конструктором?
Сейчас SGUtils.isObj(options) == false, из-за проверки на конструктор. А для чего конструктор проверяется?
2 jQuery.isPlaneObject не слишком хороший пример определения объект это или нет. Вот у нас в common такое:
Текущий вариант вернёт ложный результат в случае
Наш же вариант вернёт ложный результат в браузерах с нативной поддержкой Object.create в таком случае
3 Полифил Function.prototype.bind из es5-shim выдаст ошибку в IE<9 при некоторых условиях, если в качестве this передавать DOM-объект
4 В методах обхода по массиву не поддерживаются разряженные массивы:
выдаст ",11,,,,,,,,,101" в нормальных браузерах и "undefined1,11,undefined1,undefined1,undefined1,undefined1,undefined1,undefined1,undefined1,undefined1,101" в старых IE