【发布时间】:2013-08-06 12:27:17
【问题描述】:
我正在为 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 )
所以问题是如果你会用它来声明你的类,你会假设/希望方法是可枚举的还是应该有一种方法来配置类范围或每个成员是否应该是可枚举的?
【问题讨论】:
-
这完全取决于用例。
-
你能从中看出什么意义?
-
你说应该有允许用户在声明类时选择的语法吗?
-
@Bergi 我看到让它们可枚举的感觉是它们会变得不那么模糊......并且在大多数时候循环遍历我们感兴趣的属性时,我认为它们不可枚举在数据中而不是在方法中。也许问题是当您使用
for in时,您将其用于什么目的,您希望方法出现还是不显示? -
您很少需要迭代作为 OOP 对象并且在语义上不被用作字典的对象。事实上,序列化是唯一想到的事情,在这种情况下,只定义一个
toJSON方法会更方便
标签: javascript oop inheritance frameworks