26.10.2014, 00:12
|
Кандидат Javascript-наук
|
|
Регистрация: 14.10.2014
Сообщений: 117
|
|
Voronar,
Вообще, ящетаю, "Безопасное" расширение нативных объектов, могло бы выглядеть вот так
Object.prototype._=function(f){return f(this)}
show=function(x){console.log(x)}
sum=function(x){console.log(x+x)}
;({a: 1})._(show) // { a: 1 }
;1.._(sum) // 2
Расширяем одной функцией, а затем через каллбэк дергаем как хочем. Одну ф-цию задокументировать и запомнить -- не проблема. И не надо никаких сраных костылей enumerable и пр.
|
|
26.10.2014, 00:13
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,583
|
|
Сообщение от terminator-101
|
но проблема высосана из пальца.
|
Говорить то легко, а на деле проблемы будут не у говнокодера не задумывающегося о проверках - а лично у тебя, когда срочно потребуется подключить чей-то код и придётся рыться в чужом дерьме.
Voronar, слушать terminator-101 и kostyanet(скорее всего это вообще одно лицо) следует с осторожностью.(обрати внимание на карму) Они живут в своём маленьком трололо мире, слабо связанном с действительностью. Иногда чего дельного и могут сказать в моменты просветления, но в целом..
__________________
29375, 35
Последний раз редактировалось Aetae, 26.10.2014 в 00:18.
|
|
26.10.2014, 06:53
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
Кстати, а нельзя вместо объекта во 2-ом аргументе create, просто написать вот так:
Child.prototype.constructor = Child;
|
Нет. Конструктор не должен быть enumerable (поломает код с for in).
Цитата:
|
Я говорю. Это унылый быдлокод, который плодит лишние объекты в цепочки прототипов.
|
Справедливо, если тебе не требуются собственные методы в наследующем классе (а ТС требуется). Специально для этого в ES6 предусмотрен такой синтаксис:
class Parent {
someMethod();
}
class Child prototype Parent.prototype {};
console.log((new Child).__proto__ == Parent.prototype); //true
|
|
26.10.2014, 09:51
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Сообщение от Aetae
|
Надо примерно так:
Object.defineProperty(Object.prototype, 'extends', {
value: function(){},
enumerable: *!*false*/!*,
writable: true,
configurable: true
});
|
И не в прототип объекта, а в прототип функции.
|
|
26.10.2014, 10:20
|
Кандидат Javascript-наук
|
|
Регистрация: 14.10.2014
Сообщений: 117
|
|
Сообщение от Erolast
|
а в прототип функции
|
А Object -- это что не функция? Или ты имеешь в виду Object.__proto__?
По-идее, то что он написал, это тоже самое, что ({}).__proto__. Вроде, именно так и расширяются нативные объекты. А в саму то функцию что толку писать?
alert(Object.prototype===({}.__proto__)) // true
|
|
26.10.2014, 10:30
|
Кандидат Javascript-наук
|
|
Регистрация: 14.10.2014
Сообщений: 117
|
|
Erolast,
Object.__proto__.one=1
Object.prototype.ten=10
alert([{}.one, {}.ten])
|
|
26.10.2014, 14:26
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
А Object -- это что не функция?
|
В прототип класса функции - так яснее?
Object.defineProperty(Function.prototype, "extends", {
writable: true,
configurable: true,
enumerable: false,
value: function(){}
});
Цитата:
|
Object.__proto__.one=1
Object.prototype.ten=10
alert([{}.one, {}.ten])
|
Да ну?
|
|
26.10.2014, 15:04
|
Кандидат Javascript-наук
|
|
Регистрация: 14.10.2014
Сообщений: 117
|
|
Сообщение от Erolast
|
В прототип класса функции - так яснее?
|
То что ты написал, эквивалентно
Function.prototype.extends=function(){}
console.log(function(){}.extends, ({}).extends, "foo".extends)
// [Function] undefined undefined
за исключением сраного enumerable
Ты расширил функцию, а речь шла за объекты.
Что ну? Ликбез тебе провести? Я смотрю, ты ваще конкретно плаваешь в сабже. Пытаешься спрятать свою некомпетентность в нарочито переусложненном коде, и терминологии, придуманной тобой же.
|
|
26.10.2014, 15:08
|
Кандидат Javascript-наук
|
|
Регистрация: 14.10.2014
Сообщений: 117
|
|
Сообщение от Erolast
|
класса функции - так яснее?
|
И какие нарен классы. Нет в JS классов никаких. То что подразумевается под классом, это ссылка на конструктор, епт.
|
|
26.10.2014, 16:16
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Сообщение от terminator-101
|
Erolast,
Че то я не догоняю, до конца, че там происходит.
|
Вот пока не догоняешь, помалкивал бы
|
|
|
|