我可以在对象原型(方法)中定义属性吗?

问题描述 投票:0回答:2

问题第 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 oop properties processing.js
2个回答
0
投票

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

是的,你可以。

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

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

是的。


0
投票

来自 Google 的 Javascript 样式指南:您不应在构造函数之外添加/删除属性。

提示:构造函数完成后,切勿向实例添加或删除属性,因为这会严重阻碍虚拟机的优化能力。如有必要,稍后初始化的字段应在构造函数中显式设置为未定义,以防止以后的形状更改。将 @struct 添加到对象将检查是否未添加/访问未声明的属性。类默认添加了这个。

© www.soinside.com 2019 - 2024. All rights reserved.