我有以下脚本,我无法在函数('hello')上传递参数。
我的代码中出错了什么?
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Fabric</title>
<style>
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
Snip = function () {
};
Snip.prototype.methodB = function () {
alert('do smt');
};
Snip_Nav = (function (Snip) {
var args = arguments[0]; // problem here
var Snip_Nav = function () {
this.config = {
name: args
};
};
$.extend(true, Snip_Nav.prototype, Snip.prototype, {
init: function () {
this.items = ['red', 'blue', 'yellow'];
},
methodA: function () {
alert(this.config.name);
}
});
return Snip_Nav;
})(Snip);
function start() {
var test1 = new Snip_Nav('hello');
var test2 = new Snip_Nav();
test1.methodA();
test2.methodA();
};
</script>
</head>
<body onload="start();">
</body>
</html>
答案 0 :(得分:1)
代码的问题在于执行IIFE后,Snip_Nav
的值是函数:
function () {
this.config = {
name: args
};
};
这不是你所期望的。
一个非常简单的修复(但可能会导致其他问题,具体取决于您的整个代码),可能会有:
function (myArg) {
this.config = {
name: myArg
};
};
答案 1 :(得分:1)
您必须获得第二 arguments
定义的Snip_Nav
:
Snip_Nav = (function (Snip) {
var Snip_Nav = function () {
var args = arguments[0]; // problem SOLVED here
this.config = {
name: args
};
};
...