JavaScript函数抛出Uncaught TypeError

时间:2015-08-20 15:38:46

标签: javascript

我有一个网页。在我的网页中,我引用了一些我在一个名为“spacer.js”的文件中编写的JavaScript。 spacer.js更复杂,但一般设置如下:

function spacer() {
  // do stuff
  console.log(spacer.options);
}

spacer.initialize = function(options) {
  spacer.options = options;
};

然后,在我的网页上,我有:

<script type="text/javascript" src="./spacer.js"></script>
<script type="text/javascript">
  spacer.initialize({ id:1 });
  window.onresize = spacer();
</script>

当我加载网页时,收到错误消息:

Uncaught TypeError: spacer.initialize is not a function.

我不明白。我做错了什么。

3 个答案:

答案 0 :(得分:2)

function spacer() {
  // do stuff
  console.log(spacer.options);
}
spacer.initialize = function(options) { // needed an assignment operator and function keyword
   spacer.options = options;
}

要创建方法,您需要使用function关键字。

到浏览器,这个

spacer.initialize(options) {
  spacer.options = options;
}

被解释为这样

spacer.initialize(options); // method evocation
{spacer.options = options;}; // anonymous object 

答案 1 :(得分:2)

更改定义方式

//from
spacer.initialize(options) {
  spacer.options = options;
}

//to
spacer.initialize = function(options) {
  spacer.options = options;
}

在你的JS中,从window.resize调用中删除()

spacer.initialize({ id:1 });
window.onresize = spacer;

答案 2 :(得分:0)

顺便说一句,看起来你似乎正在尝试做两件事中的一件并且不舒服地坐在中间。在这种情况下,我个人会去1),但最好坚持使用其中一种。

1)使用方法

创建对象
var spacer = {};

spacer.initialize = function (options) {
    this.options = options;
}

spacer.getOptions = function () {
    return this.options;
}

spacer.initialize({ name: 'spacer' });
spacer.getOptions(); // { name: spacer });

DEMO

2)使用构造函数 function 构建空间对象实例:

function Spacer() {}

Spacer.prototype.initialize = function (options) {
  this.options = options;
  return this;
}

Spacer.prototype.getOptions = function () {
  return this.options;
}

var spacer = new Spacer().initialize({ name: 'spacer' });

spacer.getOptions(); // { name: 'spacer' }

DEMO