那么,首先要问一下 - 请保持温和.
我正在与一些来自各种非Web编程背景的其他开发人员合作开展一个相当重的JavaScript项目,我们决定尝试在我们的JavaScript伪类中使用公共和私有方法和属性,纯粹是一种良好的编码实践(即.我们知道它没有实际的优势或安全性)
我们玩弄了几种不同的公共和私有方式(即使用本地范围的变量和函数,使用特权方法进行公共消费),我们目前已经决定让我们的JavaScript类构造函数实际返回一个只代表它们的对象公共界面,有效隐藏其他一切.
这是一个例子:
function MyObject()
{
var _this = this;
this._privateProperty = 'somevalue';
this._privateMethod = function()
{
// Do Something
}
this.public =
{
publicProperty : _this._privateProperty,
publicMethod : function(){ return _this.privateMethod() }
}
return this.public;
}
Run Code Online (Sandbox Code Playgroud)
在Chrome中实例化并登录时:
var obj = new MyObject();
console.log(obj);
Run Code Online (Sandbox Code Playgroud)
输出:
> Object
> publicMethod: function (){ return _this.privateMethod() }
> publicProperty: "somevalue"
>__proto__: Object
Run Code Online (Sandbox Code Playgroud)
现在回答我的问题:因为将构造函数中的公共接口作为新对象返回,所以当你在console.log中时,你会注意到它将自己标识为> Object
- 而如果我们不返回该公共接口则将其标识为> MyObject
.
理想情况下,我们希望将后者显示用于调试目的,并且我知道如何访问contstructor的"MyObject"名称_this.constructor.name
,但不知道如何设置它以便以这种方式识别它.
有谁知道如何手动设置这个?
注意:
我知道这在某些方面是JavaScript惯例的混合,并试图在圆孔中安装方形挂钩,但我们发现它是一种非常明显和可读的方式来完成我们想要做的事情.我愿意接受有关如何使用不同设计实现此目的的建议,但我最终会寻找适合我们当前设计的答案.