gpt4 book ai didi

JavaScript 继承

转载 作者:行者123 更新时间:2023-11-30 06:06:56 28 4
gpt4 key购买 nike

如果我有一个对象,我想从“ super 对象”“继承”方法以确保一致性。它们将是混合变量。 修订

ParentObj = function()
{
var self = this;
this.interval = null
this.name = "";
this.timeout = 1000;

this.stop = function()
{
clearInterval(self.interval);
};

this.start = function()
{
self.log("Starting up");
setTimeout(function(){
self.getData(true);
self.interval = setInterval(function(){
self.getData();
}, self.timeout)
}, 1000);
};

this.log = function(msg)
{
require("sys").log(self.name + ": " + msg);
};

this.getData = function(override)
{
if(override || self.interval)
{
/**
* Allow
*/
self.log(new Date());
}
else
{
self.log("Unable to override and no interval");
}
}
}

ChildObj = function()
{
var self = this;
this.name = "Child";
this.timeout = 500;
this.start();
setTimeout(function(){
self.stop();
}, 2000);
}

ChildObj.prototype = new ParentObj();


var c = new ChildObj();

这似乎无法正常工作,特别是它没有看到 self.interval 并且无法清除它。

我对其他 JavaScript 继承方法持开放态度,如果它们存在的话,但我确实需要开始将内容封装到父对象中。有三四个相同的函数,但有时会更改,这意味着我必须运行十几个文件才能进行更改,而不是简单地更改父文件。

通过一些建议,我试图更清楚地定义我想要的功能类型。理想情况下,所有“子级”都将有几个独特的设置(名称、间隔、配置设置)和一个 getData() 方法,而父级管理启动、停止、日志记录和其他任何事情。

最佳答案

  • 通过使对象成为一次性函数的原型(prototype)并使用“new”调用该函数来“克隆”对象。

  • 克隆父构造函数的原型(prototype),并将结果设置为子类的原型(prototype)。

...

/**
* Extend a constructor with a subtype
* @param {Function} superCtor Constructor of supertype
* @param {Function} subCtor Constructor of subtype
* @return {Function} Constructor of subtype
*/
var extend = (function(){

return function (superCtor, subCtor) {
var oldProto=subCtor.prototype;
subCtor.prototype=clone(superCtor.prototype);
return merge(subCtor.prototype, oldProto).constructor=subCtor;
}

function Clone(){}

/**
* Clone an object
* @param {Object} obj Object to clone
* @return {Object} Cloned object
*/
function clone (obj) { Clone.prototype=obj; return new Clone() }

/**
* Merge two objects
* @param {Object} dst Destination object
* @param {Object} src Source object
* @return {Object} Destination object
*/
function merge (dst, src) {
for (var p in src) if (src.hasOwnProperty(p)) dst[p]=src[p];
return dst;
}

}());

关于JavaScript 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3771971/

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