Объект, используемый в Object.create, фактически формирует прототип нового объекта, где, как и в новой функции Function (), объявленные свойства / функции не образуют прототип.
Да,
Object.create
создает объект, который наследует непосредственно от объекта, переданного в качестве первого аргумента.С помощью функций конструктора вновь созданный объект наследует от прототипа конструктора, например, :
var o = new SomeConstructor();
В вышеприведенном примере,
o
наследуется непосредственно отSomeConstructor.prototype
.Здесь есть разница: с
Object.create
вы можете создать объект, который ни от чего не наследует,Object.create(null);
, с другой стороны, если вы установитеSomeConstructor.prototype = null;
, то вновь созданный объект будет наследоваться отObject.prototype
.Вы не можете создавать замыкания с синтаксисом Object.create, как с функциональным синтаксисом. Это логично, учитывая объем лексического (против блочного) типа JavaScript.
Ну, вы можете создавать замыкания, например, используя аргумент дескрипторов свойств:
var o = Object.create({inherited: 1}, { foo: { get: (function () { // a closure var closured = 'foo'; return function () { return closured+'bar'; }; })() } }); o.foo; // "foobar"
Обратите внимание, что я говорю о методе ECMAScript 5th Edition
Object.create
, а не о шайбе Крокфорда.Этот метод начинает реализовываться непосредственно в последних браузерах, проверьте эту таблицу совместимости .
RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/
RewriteRule ^.*$ - [R=404,L]
Это должно помочь, я думаю:
RewriteRule (.*)\.php$ path/to/your/404file [L]
301 редирект может быть более подходящим для этой задачи.