gpt4 book ai didi

javascript - 为什么这个原型(prototype)会失败?

转载 作者:行者123 更新时间:2023-11-28 10:59:26 24 4
gpt4 key购买 nike

function _(e) {
if (typeof e == 'string') {
if (e.charAt(0) == '#') {
return document.getElementById(e.slice(1));
} else if (e.charAt(0) == '.') {
var c = document.getElementsByClassName(e.slice(1));
return (c.length==1)?c[0]:c;
} else {
var t = document.getElementsByTagName(e);
return (t.length==1)?t[0]:t;
}
} else {
console.log('Error. Not a valid string in _.');
}
}

_.prototype.hide = function() {
//testing
console.log(this)
}

该函数工作正常,但是当我尝试添加方法隐藏并尝试像 _('#menu').hide(); 那样调用它时,它会抛出错误:TypeError: Object #<HTMLDivElement> has no method 'hide'我误解了什么?

是的,我确实用谷歌搜索了这个问题,但我就是不明白。如有提示,我们将不胜感激。

最佳答案

构造函数需要返回自身( return this;)。目前,它返回一个 DOM 对象,如果没有传递字符串,则返回 undefined

试试这个:

function _(e) {
if (!(this instanceof _)){
return new _(e);
}

if (typeof e == 'string') {
if (e.charAt(0) == '#') {
this.el = document.getElementById(e.slice(1));
} else if (e.charAt(0) == '.') {
var c = document.getElementsByClassName(e.slice(1));
this.el = (c.length==1)?c[0]:c;
} else {
var t = document.getElementsByTagName(e);
this.el = (t.length==1)?t[0]:t;
}
return this;
} else {
console.log('Error. Not a valid string in _.');
throw e + ' is not a valid string';
}

}

_.prototype.hide = function() {
console.log(this);
}

您可以像这样调用构造函数:

e = _('#myDiv');
e.hide();

关于javascript - 为什么这个原型(prototype)会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9225773/

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