Google Apps 脚本原型和继承

mar*_*omk 6 javascript inheritance prototype google-apps-script

我试图了解如何在 Google Apps 脚本中使用 javascript 原型和继承,但显然我仍然缺少一些东西。

这是我正在研究的结构。

   function Father (  ) {
      this.init.apply ( this, arguments );
    }
    Father.prototype ={
      init: function  (  ) {
        var optns = arguments[0] || {};
        this.job = optns.job || "unemployed";
        this.cars = optns.cars || [];
      }
    }

    function Son (  ) {
      this.init.apply ( this, arguments );
    }
    Son.prototype = {
      init : function  (  ) {
        Father.prototype.init.apply (this, arguments);
        var optns = arguments[0] || {};
        this.computers = optns.tablets || [];
      }
    }
Run Code Online (Sandbox Code Playgroud)

儿子与父亲的不同之处仅在于拥有电脑的财产。

function life() {
 var Tom = new Father({job:'carpenter', cars: ['fiat']});
 var Jim = new Son(Tom);
 Jim.computers.push('iMac');
 Jim.job = 'trader';
 Jim.cars.push('bmw');
 return
 }
Run Code Online (Sandbox Code Playgroud)

在这里,我希望 Son 实例Jim以与Tom相同的值开始(作为木匠并拥有法令),但是随着生活的继续,我期望Jim的值独立于Tom而改变。事实上,我可以在不影响Tom 的情况下为Jim添加一台计算机并更换工作,但是当我为 Jim 添加一辆车时,“bmw”也会添加到 Tom 的汽车中。为什么???

注意:如果我替换这一行,代码可以正常工作

var Jim = new Son(Tom);
Run Code Online (Sandbox Code Playgroud)

和

var Jim = new Son({job:'carpenter', cars: ['fiat']})
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么。