Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.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 为什么util.inherits创建一个从超级构造函数';什么是原型?_Javascript_Node.js_Inheritance_Prototype - Fatal编程技术网

Javascript 为什么util.inherits创建一个从超级构造函数';什么是原型?

Javascript 为什么util.inherits创建一个从超级构造函数';什么是原型?,javascript,node.js,inheritance,prototype,Javascript,Node.js,Inheritance,Prototype,在forutil.inherits中,他们调用object.create来创建一个新对象,其原型是超级构造函数的原型 ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); 为什么会这样?为什么不干脆做: ctor.prototy

在for
util.inherits
中,他们调用
object.create
来创建一个新对象,其原型是超级构造函数的原型

ctor.prototype = Object.create(superCtor.prototype, {
  constructor: {
    value: ctor,
    enumerable: false,
    writable: true,
    configurable: true
  }
});
为什么会这样?为什么不干脆做:

ctor.prototype = superCtr.prototype?
为什么不直接做:ctor.prototype=superCtr.prototype

这意味着,每当有人向
ctor.prototype
添加方法时,他们最终也会向
supercr.prototype
添加方法,因为它们是相同的对象

那太可怕了!这意味着,如果您从
EventEmitter
继承了例如
http.IncomingMessage
,那么
http.IncomingMessage.prototype
上的每个方法都将在
EventEmitter.prototype
上结束。因此,所有io.js中的每个事件发射器上都有与HTTP相关的方法

相反,我们创建了一个新对象,可以向其中添加特定于
ctor
实例的方法。由于我们确保新对象是
object.create
d from
supercor.prototype
,因此我们知道,对该对象的任何查找都将遵循[[prototype]]链,并从
supercor.prototype
中查找方法,正如您在继承时所期望的那样。但它是一个新对象,有自己定制的空间,正如您所希望的那样

为什么不直接做:ctor.prototype=superCtr.prototype

这意味着,每当有人向
ctor.prototype
添加方法时,他们最终也会向
supercr.prototype
添加方法,因为它们是相同的对象

那太可怕了!这意味着,如果您从
EventEmitter
继承了例如
http.IncomingMessage
,那么
http.IncomingMessage.prototype
上的每个方法都将在
EventEmitter.prototype
上结束。因此,所有io.js中的每个事件发射器上都有与HTTP相关的方法

相反,我们创建了一个新对象,可以向其中添加特定于
ctor
实例的方法。由于我们确保新对象是
object.create
d from
supercor.prototype
,因此我们知道,对该对象的任何查找都将遵循[[prototype]]链,并从
supercor.prototype
中查找方法,正如您在继承时所期望的那样。但它是一个新对象,有自己定制的空间,正如您所希望的那样

为什么不直接做:ctor.prototype=superCtr.prototype

这意味着,每当有人向
ctor.prototype
添加方法时,他们最终也会向
supercr.prototype
添加方法,因为它们是相同的对象

那太可怕了!这意味着,如果您从
EventEmitter
继承了例如
http.IncomingMessage
,那么
http.IncomingMessage.prototype
上的每个方法都将在
EventEmitter.prototype
上结束。因此,所有io.js中的每个事件发射器上都有与HTTP相关的方法

相反,我们创建了一个新对象,可以向其中添加特定于
ctor
实例的方法。由于我们确保新对象是
object.create
d from
supercor.prototype
,因此我们知道,对该对象的任何查找都将遵循[[prototype]]链,并从
supercor.prototype
中查找方法,正如您在继承时所期望的那样。但它是一个新对象,有自己定制的空间,正如您所希望的那样

为什么不直接做:ctor.prototype=superCtr.prototype

这意味着,每当有人向
ctor.prototype
添加方法时,他们最终也会向
supercr.prototype
添加方法,因为它们是相同的对象

那太可怕了!这意味着,如果您从
EventEmitter
继承了例如
http.IncomingMessage
,那么
http.IncomingMessage.prototype
上的每个方法都将在
EventEmitter.prototype
上结束。因此,所有io.js中的每个事件发射器上都有与HTTP相关的方法


相反,我们创建了一个新对象,可以向其中添加特定于
ctor
实例的方法。由于我们确保新对象是
object.create
d from
supercor.prototype
,因此我们知道,对该对象的任何查找都将遵循[[prototype]]链,并从
supercor.prototype
中查找方法,正如您在继承时所期望的那样。但它是一个新对象,有自己定制的空间,正如您所希望的。

原型继承就是这样工作的<代码>原型!=[[Prototype]]
Object.create
设置内部属性。这只是一种分配。@DanielA.White他们这样做的方式不也只是一种分配吗?他们只是创建了一个新对象,它的原型就是我们要找的,不是吗?原型继承就是这样工作的<代码>原型!=[[Prototype]]
Object.create
设置内部属性。这只是一种分配。@DanielA.White他们这样做的方式不也只是一种分配吗?他们只是创建了一个新对象,它的原型就是我们要找的,不是吗?原型继承就是这样工作的<代码>原型!=[[Prototype]]
Object.create
设置内部属性。这只是一种分配。@DanielA.White他们这样做的方式不也只是一种分配吗?他们只是创建了一个新对象,它的原型就是我们要找的,不是吗?原型继承就是这样工作的<代码>原型!=[[Prototype]]
Object.create
设置内部属性。这只是一种分配。@DanielA.White他们这样做的方式不也只是一种分配吗?他们只是创造了一个新的物体,它的原型就是我们要找的,不是吗?这是有道理的。非常感谢。这是有道理的。非常感谢。这是有道理的。非常感谢。这是有道理的。非常感谢。