在Node.js Express模块的代码中,我碰到了这一行,为服务器设置继承:
Server.prototype.__proto__ = connect.HTTPServer.prototype;
我不确定这样做是什么-
MDC文档(https://developer.mozilla.org/en/JavaScript/Guide/Inheritance_Revisited#prototype_and_
proto )似乎说我可以这样做:
Server.prototype = connect.HTTPServer.prototype;
确实,我做了这个测试:
var parent = function(){}
parent.prototype = {
test: function(){console.log('test')};
}
var child1 = function(){};
child1.prototype = parent.prototype;
var instance1 = new child1();
instance1.test(); // 'test'
var child2 = function(){};
child2.prototype.__proto__ = parent.prototype;
var instance2 = new child2();
instance2.test(); // 'test'
看起来一样吗?所以,是的,我想知道object.prototype .__ proto是什么设置的。谢谢!
看看图上这个网页(mckoss.com),显示prototype
,constructor
,__proto__
一个小的层次结构关系。图下的代码也很好地描述了这种关系。
当您具有一个function Base
并设置了所定义的功能对象的原型时,该语句会自动将of Derived.prototype = new Base;
设置为__proto__
(实际上是internal
[[prototype]]
),从而使Derived成为可以实例化对象的类。这似乎是定义派生类的一种更加符合标准的方法。Derived.prototype``Base.prototype
据我了解,这__proto__
是访问[[prototype]]
对象内部的一种非标准方式。它似乎得到了很好的支持,但是我不确定是否应该信任它。
无论如何,您的示例Server.prototype.__proto__ = connect.HTTPServer.prototype;
似乎都是通过另一种方式进行推导的:首先Server
通过定义构造函数和原型定义一个对象,然后[[prototype]]
手动将内部连接起来以将其变形为从派生的类HTTPServer
。
至于建议的替代方法,Server.prototype = connect.HTTPServer.prototype;
:那是个坏主意。在这里,您将的原型设置Server
为与的原型相同的对象HTTPServer
。因此,您对Server
类所做的任何更改都将直接反映在中HTTPServer
,并且可以从的其他派生类访问HTTPServer
。如果从两个派生的类HTTPServer
试图定义同一成员,则可以对混乱进行想象。
当您可以调用递归方法而不是必须将递归方法设置为变量时,是否有一种简单的方法来理解? 例如... 只是调用递归函数遍历: self.recurse(node.left) self.recurse(node.right) 必须将递归函数设置为node。左和右。右: 节点。左=自我。递归(node.left) 节点。右=自我。递归(node.left) 另一个例子是删除bst中的一个节点,你必须将递归函
1.首先,我想确认一下从编程的角度,我们有“静态类型检查”和“动态类型检查,对把? 2.一般情况下我们用typescript做静态类型检查,检查源码里面自定义数据类型,对把? 3.那么,我们做的所谓的动态类型检查是不是指的那些库,比如Joi,ajv什么的,比如你点击一个按钮,然后调这个库来检查一个obj的schema,如果类面的key value类型都能对的上,我们就通过,如果类型对不上,我们就报
例如,一个方法中有10000次循环。当它运行1000次时,backedge\u计数器触发JIT编译。解释器继续执行。当它循环4000次时,JIT编译完成。 我的问题是,剩余的6000次是如何由解释器执行的,还是如何执行本机代码?或者在下次调用此方法之前不会执行本机代码?下次调用此方法时会发生什么?
但后者给了我下面的例外。这是为什么? java.lang.StringIndexOutOfBoundsException:String index超出范围:1 java.lang.StringIndexOutOfBoundsException:String index超出范围:1 java.lang.String.charat(String.java:658)在Scala.Collection.i
我无法理解这句话(特别是粗体部分): 类型“指向 cv1 void 的指针”的 prvalue 可以转换为类型为“指向 cv2 T”的 prvalue,其中 T 是对象类型,cv2 是与 cv1 相同的 cv 限定或大于 cv1 的 cv 限定。如果原始指针值表示内存中某个字节的地址 A,并且 A 不满足 T 的对齐要求,则生成的指针值未指定。 我的问题是: > (的地址)指向的地址是否满足 的对
我需要的是,我将在端口(本地机器)中打开一个服务器监听,并且可以向我发送数据包。我的计算机没有。基本上我需要。 我正在测试服务器/客户端项目。我在服务器(公共ip)中运行stuntman-server。在我的系统中运行客户端(本地ip)。我要求为端口提供映射IP/端口。 Stun服务器返回IP和端口。然后,我在本地系统中打开一个服务器(使用java),并开始侦听端口,并将一个消息从发送到stun服