Skip to content

Замечания по некоторым методам #2

@termi

Description

@termi

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions