Да, нет штрафа за производительность.
С чего бы это? У него нет чека [[Prototype]]
, потому что foo
является собственным свойством o
.
Причина, по которой вы хотите унаследовать от null
, заключается в создании собственных цепочек прототипов. Это просто позволяет вам контролировать.
В общем, вы бы хотели наследовать от Object.prototype
, потому что методы на нем полезны и почти весь вид кода "предполагает", что каждая вещь наследует от него.
Однако вы можете просто создать свою собственную цепочку со специальной логикой
var newObject = Object.make(null,{
toString: function () { return "foobar"; },
valueOf: function () { return 42; }
});
Для некоторого значения Object.make
А потом просто создайте экземпляры этого
var o = Object.create(newObject);
console.log(o + 3);
console.log("foo" + o);
Живой пример .
Если вы действительно хотите иметь детализированный пользовательский элемент управления .valueOf
и другие методы, тогда действительно имеет смысл не наследовать от Object.prototype
для целей отладки (то есть не случайно использовать методы Object.prototype вместо ваших собственных) .
Кроме того, я не думаю, что есть реальный вариант использования для этого. Это может быть немного быстрее или занимать немного меньше памяти.