【问题标题】:Create an Object based on an existing object基于现有对象创建对象
【发布时间】:2014-09-05 15:13:13
【问题描述】:

我是原型继承的新手,我一直被困在一个简单的任务中

我有这样的事情:

var test1 = {
       clear : function () { 
         alert('hey');
       } 

 }

 var test2 = {
       varB : 2

 }

我想从 test1 扩展 test2。 谁能给我一个方向?我应该仍然使用 Object.create,还是使用函数 + 调用方法? 我有点困惑。

我找到的每个示例都是基于扩展然后设置属性、方法等。但是我的对象已经在这里声明了。

谢谢!

【问题讨论】:

标签: javascript prototype


【解决方案1】:

在现代浏览器中,您可以使用Object.setPrototypeOf:

Object.setPrototypeOf(test2, test1);

目前没有其他(官方)方法可以更改现有对象的原型。

如果你只是创建一个简单的对象,你可以使用Object.create:

var test2 = Object.create(test1);
test2.varB = 2; // or Object.assign(test2, {varB: 2});

如果您实际上不需要继承,则可以选择将对象与 Object.assign 合并:

Object.assign(test2, test1);

这只是将属性从test1 复制到test2。与继承不同,对test1 的更改不会影响test2


更多信息,我建议看看

【讨论】:

    【解决方案2】:

    您可以使用prototype 进行继承。但这只是javascript中的一些继承方式之一。

    function test1() {}
    test1.prototype.clear = function () {
        alert('hey');
    }
    
    function test2() {}
    test2.prototype = new test1();
    test2.prototype.varB = 2;
    
    var test2Instance = new test2();
    

    还有更多的javasrcipt继承方法自己用google搜索一下。

    【讨论】:

      【解决方案3】:

      一个非常基本的方法是

      test2.__proto__ = Object.create(test1)
      

      因此您将在test2 对象中使用clear 函数。

      【讨论】:

      猜你喜欢
      • 2021-01-14
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 2011-07-20
      • 2017-09-22
      相关资源
      最近更新 更多