Javascript OOP : should methods be enumerable?

标签 javascript oop inheritance frameworks

我正在为 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/

相关文章:

java - 为什么 MDB 类不能是最终的

c++ - 从子析构函数中删除父构造函数所做的分配

javascript - 如何更改 `this` 调用 Vue 实例方法的上下文?

javascript - 为什么 Mongodb 中的 ISO 日期显示提前一天?

javascript - 一个 GET 请求在 Safari 中不起作用(授权问题)-Angular 6

javascript - jQuery 导航 - 更改输入的父-父-父-父-兄弟的输入

java - 扩展类来存储附加信息是一个好习惯吗?

java - 重构部分类和循环依赖

c++ - 运行父类(super class)覆盖函数

c++ - "unspecialized class template can' t be used as a template argument”是什么意思?