Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中,如何使用_proto__属性来创建更多对象?_Javascript_Prototype - Fatal编程技术网

在JavaScript中,如何使用_proto__属性来创建更多对象?

在JavaScript中,如何使用_proto__属性来创建更多对象?,javascript,prototype,Javascript,Prototype,根据Caja文件: 禁用名称。在Firefox中,访问 对象将授予创建更多类似它的对象的权限 违反了权力最小的原则。因此,Caja拒绝接受所有建议 以“u u”(双下划线)结尾的名称。这也给了Caja 实现一个存储其簿记信息的地方 对Caja程序员来说是看不见的 我在Firebug中尝试过,只是看到了\uuu proto\uuu拥有的所有方法(即pkcsll、atob、btoa、screenX等),但我没有看到复制类型的方法。\uuuuu proto\uuuu是如何被利用的?除非我没有理解他们的

根据Caja文件:

禁用名称。在Firefox中,访问 对象将授予创建更多类似它的对象的权限 违反了权力最小的原则。因此,Caja拒绝接受所有建议 以“u u”(双下划线)结尾的名称。这也给了Caja 实现一个存储其簿记信息的地方 对Caja程序员来说是看不见的


我在Firebug中尝试过,只是看到了
\uuu proto\uuu
拥有的所有方法(即
pkcsll、atob、btoa、screenX
等),但我没有看到复制类型的方法。
\uuuuu proto\uuuu
是如何被利用的?

除非我没有理解他们的意思,否则你不需要
\uuuuu proto\uuuu
从原始原型的同一原型创建更多的对象

您可以使用标准的ecmascript 5方法来实现这一点

function FooBar() {}
FooBar.prototype.foo = function() { return "bar"; };

 /* create a FooBar object */
var fb1 = new FooBar();



 /* using __proto__ this creates an object with the same prototype as fb1 */    
var fb2 = {};
fb2.__proto__ = fb1.__proto__;



 /* and so does this, but without __proto__ */
var fb3 = Object.create(Object.getPrototypeOf(fb1));



fb1 instanceof FooBar; // true
fb2 instanceof FooBar; // true
fb3 instanceof FooBar; // true

除非我不明白他们在说什么,否则你不需要
\uuuuu proto\uuuu
从原始的同一原型创建更多的对象

您可以使用标准的ecmascript 5方法来实现这一点

function FooBar() {}
FooBar.prototype.foo = function() { return "bar"; };

 /* create a FooBar object */
var fb1 = new FooBar();



 /* using __proto__ this creates an object with the same prototype as fb1 */    
var fb2 = {};
fb2.__proto__ = fb1.__proto__;



 /* and so does this, but without __proto__ */
var fb3 = Object.create(Object.getPrototypeOf(fb1));



fb1 instanceof FooBar; // true
fb2 instanceof FooBar; // true
fb3 instanceof FooBar; // true

我不会确切地称之为利用漏洞,但在支持
\uuuuu proto\uuuuu
的JavaScript引擎中,您可以通过以下方式创建与任何对象具有相同原型的对象:

function makeObjectLike(a) {
    function maker() { }
    maker.prototype = a.__proto__;
    return new maker();
}
您也可以使用ES5的
对象.getPrototypeOf(a)
而不是
a.来做同样的事情


Caja禁止这些东西,不是因为它们本质上是坏的,而是因为如果您不信任正在加载和运行的代码,它们可能被用于邪恶。在您自己的代码中使用这种技术是很好的(除了浏览器兼容性问题)。

我不会确切地说这是一种利用漏洞的行为,但是,在支持
\uuuuuuuuuuuuuuuuuuuuuuuu
的JavaScript引擎中,您可以通过以下方式创建与任何对象具有相同原型的对象:

function makeObjectLike(a) {
    function maker() { }
    maker.prototype = a.__proto__;
    return new maker();
}
您也可以使用ES5的
对象.getPrototypeOf(a)
而不是
a.来做同样的事情

Caja禁止这些东西,不是因为它们本质上是坏的,而是因为如果您不信任正在加载和运行的代码,它们可能被用于邪恶。在您自己的代码中使用这种技术很好(除了浏览器兼容性问题)