Проверка на Object
Как лучше всего проверить переменную на "чистый" Object?
typeof variable == 'object' выдаст на любом объекте/прототипе и т.д. variable instanceof Object также как и выше, но ещё и на ф-ции. Как лучше всего проверить объект именно на "чистый" Object? Т.е. только на такие: var obj = {}; var obj2 = new Object; Звучит, наверное, бредово. Мне это нужно для строгой типизации, чтобы не могли в метод передать левый объект с "чужого" прототипа и т.д. Вот такие решения появились в голове: variable instanceof Object && variable.__proto__.__proto__ == null //или variable instanceof Object && variable.__proto__.constructor == Object |
Ruslan_xDD,
а просто нельзя ? variable.constructor === Object |
рони, ага, так и сделаю :)
isNativeObject: function(object) { return object instanceof Object && object.constructor === Object; } Хотя нет! var a = {constructor: alert}; console.log(a.constructor === Object); //false |
alert(Object.getPrototypeOf({}) === Object.prototype) с фреймами работать не будет |
isNativeObject: function(object) { return Object.prototype.toString.call(object) === '[object Object]'; } Во. |
Цитата:
class Foo {} let bar = new Foo(); alert(Object.prototype.toString.call(bar)); |
Цитата:
Цитата:
|
Цитата:
|
Rise,
Цитата:
Цитата:
Таким образом новые классы в JS - это не более чем более простой и понятный способ создания объектов через определение слова "class". С таким же успехом можно утверждать, что и объекты, созданные таким образом: Код:
function Clasz(name) Новые классы, конечно, имеют множество отличий, но они всё также являются объектами в JS. Также советую тебе прочитать правила этого форума, подумать о вежливости и о том, что "что посеешь, то и пожнёшь". |
Часовой пояс GMT +3, время: 09:52. |