如何创建一个新对象继承 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 条评论
登录 后参与评论

相关文章

使用另一个对象(仅现有键)更新javascript对象

如何使用javascript覆盖现有对象

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

如何使用JavaScript在现有JSON对象中添加新的键值对?

如何从Javascript中的现有对象创建新对象?

在ES6 JavaScript中更新现有对象数组

在QML中创建一个新的JavaScript对象

创建一个独立的Javascript对象,该对象从父级继承,而不是从子级继承到父级

如何从JavaScript中的另一个对象创建自定义对象

如何在JavaScript中的两个现有对象之间复制

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

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

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

在现有对象中添加javascript对象

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

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

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

创建一个Javascript对象的新实例

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

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

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

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

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

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

向对象Javascript中的现有键添加值

了解 JavaScript 中现有对象的方法

在javascript中的对象数组中从具有空值的数组创建一个新属性

使用 JavaScript,如何遍历 2 个 JSON 对象,比较它们的字段并根据比较创建一个新的 JSON 对象?

如何将新属性映射到 JavaScript 对象数组中的现有属性