gpt4 book ai didi

javascript - 你如何从javascript中的子对象调用父对象函数

转载 作者:数据小太阳 更新时间:2023-10-29 06:03:55 25 4
gpt4 key购买 nike

所以,我正在阅读 John Resig 的 blog , 看到了他的 micro-templating javascript engine并决定尝试实现自己的javascript模板管理系统,加深对原型(prototype)继承的理解。然而,在我开始编写它的那一刻,我遇到了一个问题。

首先,这是我的基本代码:

function template_manager() { };

template_manager.prototype = {
tags: {},
templates: {},
output: {},
default_template: "default",
set: function (tags, template_name) {
template_name = "Greetings!";
//template_name = this._util.template(this.nothing, this.default_template);
console.log(template_name);
},
get: function(tags, template_name) {
console.log("Getting");
},
unset: function(tags, template_name) {
console.log("Removing");
},
render: function(template_name) {
console.log("Rendering");
},
//_util goes here
};

// Take it for a quick test drive.
test = new template_manager;
test.set();
test.get();
test.unset();
test.render();

然后我开始编写一些通用代码,并决定将其放入一个实用程序对象中:

    _util: {
// Used to set the default values for optional arguments
optional: function(obj, def_value) {
return (typeof obj === "nothing") ? obj : def_value;
},
template: function(template_name) {
return this._util.optional(template_name, this.default_template);
},
},

现在,当我尝试在我的 set() 函数中调用我的 _util.template() 函数时,我当然会得到一个错误,因为 this 指向 _util 对象而不是 template_manager 对象。我看了一下 jQuery extend 方法,我想我明白它在做什么。我的问题是,我是否需要实现我自己的/使用 jQuery 的 extend 方法,或者我是否有另一种方法来调用 template_manager 对象来 self 的 _util 对象?

(附:我看过 Douglas Crockford 关于原型(prototype)继承的 article,我认为答案就在那里,但恐怕我还没有完全理解它。)

最佳答案

您可以使用callapply

template_manager.prototype = {
set: function (tags, template_name) {
template_name = "Greetings!";
template_name = this._util.optional.call(this, this.nothing, this.default_template);
console.log(template_name);
}
}

参见 "Getting Out of Binding Situations in JavaScript"文章以获得更明确的解释。

关于javascript - 你如何从javascript中的子对象调用父对象函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2375287/

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