希望有人可以帮助我使用我的代码。
JavaScript的:
function myFrame(id){
if (id) {
if (window === this) {
return new myFrame(id);
}
this.e = document.getElementById(id);
return this;
} else {
return "";
}
}
myFrame.prototype = {
math: function () {
alert(1 + 1);
},
hide: function () {
this.e.style.display = 'none';
return this;
}
}
HTML:
<p id="hideParagraph">Hide Paragraph</p>
<input type="button" name="math" onclick="hide()" value="Hide Paragraph" />
<input type="button" name="math" onclick="math()" value="Alert Math" />
<script type="text/javascript">
function math() {
myFrame("body").math();
}
function hide() {
myFrame("hideParagraph").hide();
}
</script>
上面的代码工作正常,但我想知道有没有办法不指定元素。
例如,我需要指定&#34; body&#34; 或其他一些字符串值才能使此代码正常工作,否则我得到&#34;不是功能&#34; 错误消息
myFrame("body").math();
有没有办法让我有这样的代码:
myFrame().math();
并且仍然使用&#34;隐藏&#34; 方法,如:
myFrame("hideParagraph").hide();
非常感谢任何帮助!
答案 0 :(得分:0)
问题是你的
return "";
尝试:
return this;
答案 1 :(得分:0)
也许这会帮助您理解您的问题:
function Thing(val) {
this.val = val;
};
Thing.prototype.alert = function() {
alert(this.val);
};
function start(val) {
return new Thing(val);
}
start("Hi").alert();
您想要一个带有alert方法的类,然后在外部函数中创建该类的新实例。
可能有很多方法可以做到这一点。使用此设置,您可以多次拨打start
。
答案 2 :(得分:0)
这里的问题是你的返回值。
当您致电myFrame("body")
时,您的函数中的window === this
为true
,然后调用new myrFrame('body')
。当发生这种情况时,你return this;
。新创建的对象。这个对象在其原型中包含.math()
和.hide()
方法。
myFrame().math();
。 myFrame()
未通过if(id)
检查,因此只返回''
。一个空白的字符串不是myFrame()
对象。字符串没有.math()
方法。
您需要调整myFrame
函数,如下所示:
function myFrame(id){
// Determine whether we called 'myFrame()` or 'new myFrame()'
// In "use strict"; (strict mode), do `if(!this)`
if (window === this) {
return new myFrame(id);
}
else{
// In here, this is our new myFrame object
if(id){
this.e = document.getElementById(id);
}
// This return statement isn't actually needed
// return this;
}
}
确保始终返回一个对象,无论您传递的参数是什么。