【问题标题】:Can I define a property within an object prototype (method)?我可以在对象原型(方法)中定义属性吗?
【发布时间】:2016-10-06 17:28:46
【问题描述】:

问题第 1 部分:我创建了一个包含属性的对象构造函数,但我想知道是否可以在其中一个方法中定义对象的另一个属性。例如:

var Player = function(p1) {
    this.property1 = p1;
    this.property2 = 0;
}

那么,我可以在一个方法中定义this.property3,比如:

Player.prototype.drawMethod = funtion() {
    this.property3 = 1;
}

并使其可访问,例如:

var obj = new Player(true);
if (obj.property3 ===1 && obj.property1 === 1) {
    //code
} else {
    obj.property3 = obj.property2;
}

问题第 2 部分:此外,属性是否会被接受为函数,我是否可以使用以下方式调用它们:

this.func = function() {
    //code
}
...
obj.func();

【问题讨论】:

  • 对象已在 javascript 中定义。您是在问是否可以用您的 Object 构造函数版本覆盖 Object ?还是您为函数选择名称 Object 只是一个巧合?
  • 你可以为任何对象添加属性,对象没有什么特别之处。
  • 我不认为if (obj.property3 === 1 === obj.property1) { 做你认为它做的事。它不会将所有 3 件事相互比较,那就是 if(obj.property3 ===1 && obj.property1 === 1)
  • @user2263572 构造函数的名字是巧合,我可以命名为Player
  • @Roman 最好编辑问题,以避免混淆。

标签: javascript oop properties processing.js


【解决方案1】:

我想知道是否可以在其中一个方法中定义对象的另一个属性

是的,你可以。

但是请注意,这被认为是不好的样式,因为它在一个点(构造函数)上是不可见的,实例将具有哪些属性。众所周知,引擎不会优化这种情况 - 它们为构造函数创建的对象的形状保留必要的空间,并且在实例化之后更改它需要一些额外的工作。

属性会被接受为函数吗?我会称它们为[类似于方法]?

是的。

【讨论】: