在构造函数变量上定义对象时,JavaScript中会发生什么

时间:2016-06-23 09:23:33

标签: javascript prototype

假设我在Javascript中定义了一个构造函数和一个原型,如下所示:

MyGame.Player = function(){
    this.somevar = 42;
};
MyGame.Player.prototype = {
    somevar: null,
    someFunc: function(){}
};

如果我执行以下操作会发生什么:

MyGame.Player.Helper = function(){...}
MyGame.Player.Helper.prototype = {...}
  • javascript会实际允许吗?
  • Helper会在MyGame.Player()的实例中显示为ownProperty吗?
  • 即使我没有Player对象,我也可以随时创建新的Helper对象吗?

1 个答案:

答案 0 :(得分:2)

  

javascript会实际允许吗?

不确定。它只是一个函数作为对象的属性。在经典的OOP中,这将被称为类方法

  

Helper会在MyGame.Player()的实例中显示为ownProperty吗?

不。它是构造函数的属性,而不是实例的属性。该实例仅获取构造函数中分配给this的所有属性以及prototype中的任何属性。它不继承构造函数的属性。

  

即使我没有Player对象,我也可以随时创建新的Helper对象吗?

当然,因为您拨打了new MyGame.Player.Helper,而不是new (new MyGame.Player).Helper

换句话说,您刚刚为MyGame.Player.Helper分配了一个功能,当然您可以通过MyGame.Player.Helper()来调用它,因为这就是您放置它的位置。