gpt4 book ai didi

javascript - 普通对象的原型(prototype)继承可以吗?

转载 作者:行者123 更新时间:2023-11-28 10:51:50 25 4
gpt4 key购买 nike

我在node.js中有这段代码:

'use strict';
var Controller = require('../api/Controller');
var _Promise = require('bluebird');

var BookingController = function(model) {
Controller.call(this);
this.model = _Promise.promisifyAll(model);
};

BookingController.prototype = Object.create(Controller.prototype);
BookingController.prototype.constructor = BookingController;

module.exports = function(model) {
return new BookingController(model);
};

我使用 Object.create 从我的 SuperController 继承所有方法,并使用 Controller.call 来从我的 SuperController 中的 BookingController 继承 this.model,一切都好,基本的东西。

我想知道的是,如果可以达到与普通物体相同的效果,我会解释:

var SuperObject = {
printName: function() {
console.log(this.name);
}
};

var NormalObject = {
this.name = 'Amanda'
};

console.log(NormalObject.printName) // will print Amanda.

这可能吗?

这正是我对原型(prototype)继承所做的事情,但我想对普通对象进行处理。

还有其他问题请大家帮忙..

关于速度和性能,对象继承(如果可能)或原型(prototype)继承哪个更好?

谢谢!

最佳答案

是的 - 原型(prototype)继承都是关于对象的!这些 ControllerBookingController 构造函数及其 .prototype 属性只会掩盖正在发生的事情 behind the scenes当您使用 new keyword 调用它时.

但是您已经使用 Object.create 窥探了幕后的情况。正确继承(基本的东西,正如你所说:-D)。您似乎没有意识到您确实已经在此处将其与“普通对象”一起使用: BookingController.prototype 对象(实例将从该对象继承)继承自 Controller.prototype 对象。

你可以对阿曼达做同样的事情:

var superObject = {
printName: function() {
console.log(this.name);
}
};

var normalObject = Object.create(superObject);
normalObject.name = 'Amanda';

console.log(normalObject.printName()) // Amanda

About velocity and performance, what is better use?

在要求性能之前,您应该使用更合适的。如果您只创建单个对象,通常是 Object.create,如果您创建多个实例并且还需要初始化它们,则构造函数和 new 是合适的工具。

毕竟两者都使用相同的原型(prototype)继承。然而,尤其是在许多情况下,JS 引擎更擅长优化构造函数。虽然 Gecko 的 Object.create 速度非常快,但在 V8 中,Object.createnew 调用慢得多。

关于javascript - 普通对象的原型(prototype)继承可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31897168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com