Javascript模块模式没有';不能给出正确的实例

Javascript模块模式没有';不能给出正确的实例,javascript,instanceof,Javascript,Instanceof,有时候你以为自己知道什么,结果却发现自己真的不知道 在过去的几天里,我在当地的一个技术小组做了一个演讲,对Javascript继承做了大量的研究。没问题,我想,我知道这件事,我会好好温习一下 事实证明,我还有很多东西要学。这是让我吃惊的第一件事: function Vehicle() { function move() { console.log('moving'); } return {move: move} } function OtherVehicle()

有时候你以为自己知道什么,结果却发现自己真的不知道

在过去的几天里,我在当地的一个技术小组做了一个演讲,对Javascript继承做了大量的研究。没问题,我想,我知道这件事,我会好好温习一下

事实证明,我还有很多东西要学。这是让我吃惊的第一件事:

function Vehicle() {
   function move() {
      console.log('moving');
   }
   return {move: move}
}

function OtherVehicle() {
   this.alsoMove = function() {
      console.log('also moving')
   }
}
第一种方法是我一直理解的模块模式。第二,虽然我不知道它的名字,但我理解它基本上是等价的——只是一个小的语法变化

除:

(new Vehicle()) instanceof Vehicle \\ returns false
(new OtherVehicle()) instanceof OtherVehicle \\ returns true
new Vehicle()
返回一个“对象”。
看看这个,这是有道理的,但这不是我所期望的。 有人能解释一下这里发生了什么,为什么,也许能给我指出一个真正好的资源,让我了解这件事的本质吗

作为后续行动

var Car = function() { 
   function drive() { console.log('driving') };
   return {drive: drive}
}

Car.prototype = new Vehicle() //I know, Object.create preferred

(new Car).move() //undefined

// However...
var Car = function() { 
   this.drive = function () { console.log('driving') };
}

Car.prototype = new Vehicle();
(new Car()).move() //output 'moving'
因此,模块模式不能用于继承?

或者我今天刚从床的另一侧醒来,应该在下次触摸键盘之前跑一跑吗?

我不知道有什么特别好的,但这里还是有一些反馈

new Vehicle()返回一个“对象”

返回{}
覆盖默认返回值
this
,该值是实例化对象。用
new
调用这样的函数是毫无意义的,因为
这个
会被丢弃。就OOP语言而言,JavaScript有点奇怪,因为它允许您在构造函数中为
this
返回另一个值

所以是的,以这种方式使用的继承将不起作用:
{}
本身并没有以任何方式链接到父/基类,这就是为什么

(新车).移动()//未定义


未定义。

谢谢。这绝对有道理。我仍然觉得这些年来我一直在做错事。不过,不管怎样,构图还是继承,对吗?;-)当然:-)(我是迪凡迷)。我知道你的意思——在使用JavaScript几十年后,我仍在定期学习有关JavaScript的新知识(我决不是专家)。。尤其是现在NodeJS很受欢迎,它真的很流行。。