功能混淆的构造函数

马特奥·鲁比尼(Matteo Rubini)

在这种情况下

var A = function(){
    this.d = 123;
}
A.prototype.c = 999;
A.prototype.d = 333;
var B = (new A()).constructor;

console.log(""+B);

console.log(new A().d); // 123
console.log(new B().d); // 123
console.log(new A().c); // 999
console.log(Object.getPrototypeOf(new B()).c); // 999 why?

A和B共享相同的构造函数,但B不是A,为什么具有相同的A原型?

在这种情况下

var A = function(){
    this.d = 123;
}
A.prototype.c = 999;
A.prototype.d = 333;
var B = A.constructor;

console.log(""+B);

console.log(new A().d); // 123
console.log(new B().d); // undefined
console.log(B.d); // still undefined
console.log(new A().c); // 999
console.log(Object.getPrototypeOf(new B()).c); // undefined

B是A的构造函数,而不是他的实例

B是什么?如何在没有A实例的情况下访问A的构造函数?

炸药

调用时new A(),将创建一个A原型为的新对象A.prototype当您要求时(new A()).constructor,您constructor将从该A实例的原型链中访问该属性这将是A.prototype.constructor

A本身就是一个Function对象。也就是说:A是的实例Function当您要求时A.constructor,您constructor将从该Function实例的原型链中访问该属性这将是Function.prototype.constructor

在您的第一种情况下,BA是对完全相同的功能的引用。它完全预计的结果new A()new B()将具有相同的属性和相同的原型链。

在你的第二个例子,BFunction构造-即,构造函数的函数。调用将new B()创建一个新Function对象。因此,的结果new B()没有与A实例相同的属性

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

功能混淆的构造函数

来自分类Dev

与构造函数链接的混淆

来自分类Dev

与构造函数和子类混淆

来自分类Dev

与构造函数和子类混淆

来自分类Dev

混淆了Intent构造函数的问题

来自分类Dev

在.NET中将构造函数从混淆中排除

来自分类Dev

C ++构造函数功能

来自分类Dev

std :: experimental :: optional <T>实现:Constexpr构造函数混淆

来自分类Dev

Ruby的类构造函数和虚拟访问器混淆了

来自分类Dev

如何创建此功能?A =(0)['构造函数'] ['构造函数']

来自分类Dev

朋友功能和复制构造函数

来自分类Dev

使用Array的构造函数在漏洞利用工具包中混淆了Javascript

来自分类Dev

与功能构成混淆

来自分类Dev

与静态链接的功能混淆

来自分类Dev

找到混淆功能

来自分类Dev

与异步功能混淆

来自分类Dev

与继承的功能混淆

来自分类Dev

与全局功能混淆

来自分类Dev

Dart匿名功能混淆

来自分类Dev

与异步功能的混淆

来自分类Dev

与继承的功能混淆

来自分类Dev

功能依赖混淆

来自分类Dev

交换功能-指针-混淆

来自分类Dev

拦截C ++隐式副本构造函数,或调用其功能

来自分类Dev

构造函数作为功能try块-异常终止程序

来自分类Dev

非静态类中的静态构造函数的功能是什么?

来自分类Dev

如何在JAVA中获得静态构造函数的功能?

来自分类Dev

C ++类副本构造函数没有匹配功能

来自分类Dev

扩展功能不会调用基本构造函数