我正在为 JavaScript 开发一个新的 OOP 模型,我想知道您认为将对象上的方法设置为可枚举的方法还是仅对数据成员设置方法是正确的。我可以从两者中看出一些意义,也许没有明确的答案。
也可以使自己的方法可枚举而继承的方法不可...
也就是说,我觉得无论如何让所有数据成员都可枚举是有意义的,即使它们是继承的也是如此。
更新:从人们的回答来看,这似乎并不清楚。我正在创建一个 OOP 模型,它允许用户编写类似这样的东西来声明一个类:
更新 2:与此同时,项目已经完成,现在变成了这样:OoJs .其中,包括方法在内的用户定义属性是可枚举的,框架添加的属性不是。
;(function( namespace )
{
'use strict';
namespace.Shape = Shape
var Static = namespace.OoJs.setupClass( "Shape" )
// Data members
//
Static.canvas = null
Static.Protected( "canvas" ) // Protected members
Static.Public () // Public members
// constructor
//
function Shape()
{
// Data members
//
this.sides = null
// Private methods
//
this.init = init
this.Protected( "sides" ) // Protected members
var iFace = this.Public( getOffset ) // Public interface
this.init() // for example
return iFace
}
// Method definitions
//
function init (){ /*do something useful*/ }
function getOffset(){ return [ this.x, this.y ] }
})( window )
所以问题是,如果您要使用它来声明您的类,您是否会假设/希望方法是可枚举的,或者是否应该有一种方法来配置类范围或每个成员是否应该是可枚举的?
最佳答案
除非有一些与键相关联的语义——您鼓励对象的用户迭代其属性——否则让方法可枚举既没有优点也没有缺点。
隐藏它们没有任何好处,解释或部分评估脚本的 IDE 和其他工具始终可以使用 getOwnPropertyNames
提供自动完成等。
Object.getOwnPropertyNames
Returns an array of all properties (enumerable or not) found directly upon a given object.
关于Javascript OOP : should methods be enumerable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18064241/