对象如何在JavaScript中运行?

时间:2013-10-08 19:22:38

标签: javascript

var Ninja = function() {
   this.swingSword = function() {
       return true
   }
}
Ninja.swingFire = function() {
   return true
}

var ninja = new Ninja()
assert(ninja.swingFire()) // undefined

所以它正在创造一个Ninja的新对象,但为什么swingFire不包含在这种情况下呢?有人能解释一下原因吗?

2 个答案:

答案 0 :(得分:8)

使用new创建的实例将从constructor.prototype继承,而不是从构造函数对象本身继承。这将按您的意愿行事:

Ninja.prototype.swingFire = function() {
   return true;
}

答案 1 :(得分:1)

如果你想知道Javascript中的对象,函数,“类”和继承是如何工作的,你应该看一下这个视频:

面向对象JavaScript的权威指南: http://youtu.be/PMfcsYzj-9M

这是我见过的JS中面向对象的最佳解释。

在您的情况下,会发生以下情况:

创建new Ninja()时,创建一个新的空对象({}),其中包含指向函数原型的prototype属性。然后函数 Ninja 将被调用为新创建的对象的构造函数。它创建了swingSword函数,并使其成为对象的一种方法。

swingFire 函数将分配给您创建的对象,因为它是函数本身的方法,而不是其原型。函数也是对象,因此它们实际上可以具有属性。

如果一个对象没有某个属性或方法,它会查看它的原型。如果原型具有所述属性/方法,则使用它代替。这意味着如果您为原型提供方法,则使用它的每个对象也可以使用此方法。这就是你将方法分配给函数原型的原因。

再次:观看视频,您将理解此解释。