如何创建一个新对象继承 JavaScript 中的现有对象?

shengbin_xu

我有一个动物对象,我想创建一个狗对象,它继承自动物。

以下代码没问题:

var animal = {
    name: "animal",
    voice: function () {
        return 'haha';
    }
};

if (typeof Object.beget !== 'function') {
    Object.beget = function (o) {
        var F = function () {};
        F.prototype = o;
        return new F();
    }
}
var dog = Object.beget(animal);

dog.voice = function () {
    return 'wangwang';
};
document.writeln(dog.name);
document.writeln(dog.voice());
// animal 
// wangwang

但我想像这样实现Object.beget函数:

if (typeof Object.beget !== 'function') {
    Object.beget = function (o) {
        var F = {};
        F.prototype = o;
        return F;
    }
}

创建一个空对象,并将其原型对象更改为动物对象,但出现错误:

Uncaught TypeError: dog.voice is not a function

谁能告诉我我错在哪里?非常感谢!

某些表演

你想要Object.create,这将创建一个新对象,其原型是作为第一个参数传递的对象:

var animal = {
    name: "animal",
    voice: function () {
        return 'haha';
    }
};

if (typeof Object.beget !== 'function') {
    Object.beget = (o) => Object.create(o);
}
var dog = Object.beget(animal);

dog.voice = function () {
    return 'wangwang';
};
document.writeln(dog.name);
document.writeln(dog.voice());
// animal 
// wangwang

另一种选择是使用setPrototypeOf,它将通过分配 toFprototype属性来完成您尝试执行的操作但是分配给prototype属性只对构造函数(或class有意义- 如果您有一个对象(而不是构造函数),您要设置其原型,请setPrototypeOf改用。(分配给__proto__属性也可以,但setPrototypeOf更好)

var animal = {
    name: "animal",
    voice: function () {
        return 'haha';
    }
};

if (typeof Object.beget !== 'function') {
    Object.beget = function (o) {
        var F = {};
        Object.setPrototypeOf(F, o);
        return F;
    }
}
var dog = Object.beget(animal);

dog.voice = function () {
    return 'wangwang';
};
document.writeln(dog.name);
document.writeln(dog.voice());
// animal 
// wangwang

但是像这样改变内置对象Object是非常糟糕的做法 - 如果可能,请考虑另一种解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Javascript中的对象数组的最后一个对象之后追加几个新对象?

来自分类Dev

从JavaScript中的另一个对象创建对象

来自分类Dev

Javascript解构以填充现有对象

来自分类Dev

将现有的var添加到JavaScript中的新对象并遍历它们

来自分类Dev

如何创建一个复杂的Javascript对象

来自分类Dev

从Javascript中的对象数组创建一个对象

来自分类Dev

从现有对象数组创建JavaScript对象数组

来自分类Dev

在现有对象中添加javascript对象

来自分类Dev

创建一个新的Date对象或使用JavaScript Date()的setter方法

来自分类Dev

创建一个新的javascript对象,该对象仅具有从另一个现有对象中选择的属性

来自分类Dev

如何在Javascript中创建一个继承另一个函数的属性和方法的函数?

来自分类Dev

AngularJS / JavaScript从另一个对象创建一个新对象

来自分类Dev

如何从现有值创建一个新对象?

来自分类Dev

Javascript:如果位于另一个文件中,则无法创建新对象

来自分类Dev

Javascript对象。如何创建一个在同一对象内调用函数的按钮

来自分类Dev

创建一个Javascript对象的新实例

来自分类Dev

如何创建一个跟踪股价的Javascript对象?

来自分类Dev

如何在JavaScript中的另一个对象中查找具有属性的对象

来自分类Dev

JavaScript-在带有计数的对象数组中查找唯一值,并创建一个新的对象数组

来自分类Dev

根据现有对象有效地创建新的JavaScript对象

来自分类Dev

在javascript中,如何创建一个遍历所有对象的for循环?

来自分类Dev

创建一个JavaScript对象

来自分类Dev

如何在属性值上创建一个没有双引号的javascript对象

来自分类Dev

JavaScript - 如何将多个嵌套数组中的所有对象放入一个新的唯一对象数组

来自分类Dev

如何使用一个共享密钥从两个对象数组创建一个对象数组 - JavaScript

来自分类Dev

如何在不使用javascript更改第一个对象的情况下在现有对象中附加值?

来自分类Dev

如何遍历 json 对象并使用 Javascript 形成一个带有连接值的新对象?

来自分类Dev

通过从现有对象中获取一些元素来创建一个新对象

来自分类Dev

使用javascript从现有对象中创建新对象

Related 相关文章

  1. 1

    如何在Javascript中的对象数组的最后一个对象之后追加几个新对象?

  2. 2

    从JavaScript中的另一个对象创建对象

  3. 3

    Javascript解构以填充现有对象

  4. 4

    将现有的var添加到JavaScript中的新对象并遍历它们

  5. 5

    如何创建一个复杂的Javascript对象

  6. 6

    从Javascript中的对象数组创建一个对象

  7. 7

    从现有对象数组创建JavaScript对象数组

  8. 8

    在现有对象中添加javascript对象

  9. 9

    创建一个新的Date对象或使用JavaScript Date()的setter方法

  10. 10

    创建一个新的javascript对象,该对象仅具有从另一个现有对象中选择的属性

  11. 11

    如何在Javascript中创建一个继承另一个函数的属性和方法的函数?

  12. 12

    AngularJS / JavaScript从另一个对象创建一个新对象

  13. 13

    如何从现有值创建一个新对象?

  14. 14

    Javascript:如果位于另一个文件中,则无法创建新对象

  15. 15

    Javascript对象。如何创建一个在同一对象内调用函数的按钮

  16. 16

    创建一个Javascript对象的新实例

  17. 17

    如何创建一个跟踪股价的Javascript对象?

  18. 18

    如何在JavaScript中的另一个对象中查找具有属性的对象

  19. 19

    JavaScript-在带有计数的对象数组中查找唯一值,并创建一个新的对象数组

  20. 20

    根据现有对象有效地创建新的JavaScript对象

  21. 21

    在javascript中,如何创建一个遍历所有对象的for循环?

  22. 22

    创建一个JavaScript对象

  23. 23

    如何在属性值上创建一个没有双引号的javascript对象

  24. 24

    JavaScript - 如何将多个嵌套数组中的所有对象放入一个新的唯一对象数组

  25. 25

    如何使用一个共享密钥从两个对象数组创建一个对象数组 - JavaScript

  26. 26

    如何在不使用javascript更改第一个对象的情况下在现有对象中附加值?

  27. 27

    如何遍历 json 对象并使用 Javascript 形成一个带有连接值的新对象?

  28. 28

    通过从现有对象中获取一些元素来创建一个新对象

  29. 29

    使用javascript从现有对象中创建新对象

热门标签

归档