【问题标题】:Prototype displays source code (Google Apps Script/Javascript)原型显示源代码(Google Apps Script/Javascript)
【发布时间】:2015-06-19 04:50:02
【问题描述】:

GAS 超级奇怪:如果我给一个函数添加一个原型,那么这个原型的源代码会被添加到函数的每个实例中。

function createPerson() {
var me = new Person("Ben", "Jamin");
Logger.log(me);
};

function Person(firstname, lastname) {
  this.firstname = firstname;
  this.lastname = lastname;
};

Person.prototype.member = function() {
  return "yes"
};

这是它记录到控制台的内容:

[15-04-13 11:47:12:351 CEST] {成员= 功能 () { 返回“是”; } , 姓=贾敏, 名=本}

我做错了什么?

【问题讨论】:

    标签: javascript arrays object google-apps-script prototype


    【解决方案1】:

    不是原型专家,但您可以访问您的对象,例如:

    Logger.log("%s %s is a member? %s",me.firstname,me.lastname,me.member());
    

    看下面:

    function createPerson() {
      var me = new Person("Ben", "Jamin", false);
      var you = new Person("Bint", "Jamin", true);
      Logger.log("%s %s is a member? %s",me.firstname,me.lastname,me.isMember());
      Logger.log("%s %s is a member? %s",you.firstname,you.lastname,you.isMember());
    };
    
    function Person(firstname, lastname, member) {
      this.firstname = firstname;
      this.lastname = lastname;
      this.member = member;
    };
    
    Person.prototype.isMember = function() {
      return this.member;
    };
    

    创建 Person 时,isMember 附加到新对象。它继承了对象引用“this”。您仍然需要将其作为函数访问以评估代码。有人可能会纠正我,但这不是 Apps Script 夸克,而是 javascript 的工作原理。

    【讨论】:

    • 是的。如果您在客户端 javascript 中使用原型,也会发生同样的情况。函数只是对象的另一个属性。那是正常的javascript。
    • 感谢您的回答,可能有效。我的问题是整个代码都保存在实例中。也许这只是外观,但它看起来并不应该是那样的。
    • 这就是它的工作原理。如果你 console.log 'me',即使是纯 javascript。它将返回对函数的引用,而不是评估的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 2014-09-08
    • 2015-12-28
    相关资源
    最近更新 更多