【问题标题】:Add toString to backbone-model-like objects将 toString 添加到骨干模型类对象
【发布时间】:2017-10-11 08:00:00
【问题描述】:

我最近从 Java 后端更改为 JS 前端。我们使用像对象结构这样的主干(至少我的同事是这么告诉我的),我想知道是否有办法覆盖toString()(例如应该从console.log 调用)。

这就是我们的模型的样子

// namespace
var De = {};
De.Ppasler = {};

De.Ppasler.Model = (function () {

/** @constructor */
function Model(param) {
   var self = this;

   self.public = function() {
    // do sth public
    console.log("public", private());
   };

   function private() {
    // do sth private
    return "private";
   }
   
   // this is what I would have done in Java
   self.toString = function() {
    return "[object Model]";
   }
 }

 return Model;
}());

var model = new De.Ppasler.Model();
model.public();
console.log(model);

添加toString 模型不起作用。

我也试过this one

Model.prototype.toStringself.prototype.toString 但这会导致错误

我无法确定model 是否已定义,并且我想避免undefined-check,然后直接调用toString 进行登录。

【问题讨论】:

  • 见这个:stackoverflow.com/q/36215379/2333214console.log 不是标准的一部分。你最好重写 console.log/ 编写你自己的日志函数来调用你定义的 toString/ 特定方法
  • 感谢您的提示,我会 100% 猜到 console.log 是一个标准函数……我猜我被 Java 宠坏了 :)
  • 这看起来真的很像XY problem。您想在这里实现什么目标?
  • @EmileBergeron 因为我认为这是一种常见的方法,我没有质疑它。我的意图是以有意义的方式记录“对象”。由于我不能确定它的定义,我不想打电话给model.toString()
  • console.log 与大多数浏览器工具一起使用是智能的,它可以让您直接在其中探索对象。

标签: javascript backbone.js tostring


【解决方案1】:

大多数浏览器工具都提供智能console.log,让您可以直接探索对象,因此无需覆盖toString

即使您在对象上覆盖toString,大多数浏览器实现console.log 也不会在传递的对象上调用toString

alert 之类的东西会达到你的预期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2013-10-11
    • 1970-01-01
    • 2013-10-14
    • 2013-05-27
    • 2011-09-26
    • 1970-01-01
    相关资源
    最近更新 更多