gpt4 book ai didi

javascript - 如何在JS中重新定义标准函数的构造函数?

转载 作者:行者123 更新时间:2023-12-03 11:19:04 25 4
gpt4 key购买 nike

所以,我想用输入参数重新定义 HTMLButtonElement 的构造函数。我知道如何在没有参数的情况下做到这一点:

var CButtonPrototype = Object.create(HTMLButtonElement.prototype);
CButtonPrototype.createdCallback = function()
{
alert("call");
this.setAttribute("class", "some class");
this.value = 0;
this.innerHTML = "some text";
};

var CButton = document.registerElement('cbutton', {
prototype: CButtonPrototype
});

var myButton = new CButton();

它是有效的,但我想使用这个类,例如 var myButton = new CButton(arg 1, arg 2, etc);。此方法不允许我执行 CButtonPrototype.createdCallback = function(arg 1, arg2)。我该如何解决这个问题?也许你知道另一种方法?

谢谢\o/

最佳答案

如果您需要扩展此类型,请考虑以下事项:

CButton.prototype.test = function()
{
console.log(arguments);
}

CButton.prototype.test2 = function(num, str, bool)
{
console.log(num + ' ' + str + ' ' + bool);
}

myButton.test(20, 'hello', true); //call test function with parameters
myButton.test2(20, 'hello', true); // still the same

关于您原来的问题:

你不能插入参数,因为这个“函数”只是系统函数的委托(delegate)......在你的例子中 - 一个对象c'tor。

要测试它,您可以尝试参数 - js 中每个函数内的一个特殊数组,表示函数的参数:

var CButtonPrototype = Object.create(HTMLButtonElement.prototype);
CButtonPrototype.createdCallback = function()
{
console.log(arguments); // print arguments to the console screen
this.setAttribute("class", "some class");
this.value = 0;
this.innerHTML = "some text";
};

var CButton = document.registerElement('cbutton', {
prototype: CButtonPrototype
});

var myButton = new CButton();

运行此代码 - 您将看到一个空数组 - 主要是因为您的 c'tor 调用“new CButton()”没有参数。尝试插入参数,你会得到一个错误。

关于javascript - 如何在JS中重新定义标准函数的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27206115/

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