0
在下面的代碼中,當單擊該按鈕時出現錯誤:TypeError: i.Print is not a function
。這個錯誤的原因是什麼,我該如何解決?當我查看按鈕的click
處理程序中的i
的值時,使用Firefox調試器,我看到i.prototype.Print
的值爲Outer/Inner.prototype.Print()
。如何解決函數原型上的'不是函數'錯誤?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<p id="prn">Value here</p>
<button id='btn'>Print</button>
<script src="https://code.jquery.com/jquery-1.12.4.min.js">
</script>
<script>
function TestObject(i)
{
$("#btn").on("click", function() {
i.Print();
i.Change(Math.random() * 10 + 5);
});
}
function TestPrototype()
{
var o = function Outer() {
function Inner(v)
{
var iv = v;
function print()
{
$("#prn").text(iv);
}
};
Inner.prototype.Print = function() {
print();
console.log(iv);
};
Inner.prototype.Change = function(nv) {
iv = nv;
};
return {
getInner : function(v) {
var i = Inner;
i(v);
return i;
}
};
}();
var i1 = o.getInner(10);
TestObject(i1);
}
;(function() {
TestPrototype();
}());
</script>
</body>
</html>
這解決了問題。但是現在,'Inner'對象的私有方法'print'和成員變量'iv'不能從它的'Print'方法訪問。 –
我編輯了我的答案,使用成員變量可以解決這個問題。您可以在日誌中看到輸出。即_console.log_ –
是的,工作。因此對'prototype'函數的需求是可用的,即對象應該使用'new'關鍵字創建? –