未定义Javascript对象
Javascript object undefined
我的代码一直告诉我,我创建的对象是未定义的。
我正在加载几个JS文件,然后调用函数,但它错误
错误:
未捕获的类型错误:无法读取未定义的属性"setListenUrl"
这是代码:
<script src="{{ URL::asset('javascript/chat.js') }}"></script>
<script>
$(function() {
chatbox.setListenUrl('{{ URL::route('chat.listen') }}');
chatbox.setSendURL('{{ URL::route('chat.send') }}');
@if(Auth::check())
chatbox.setAuth(true);
@endif
@if(isset($game))
chatbox.setGame('{{ $game }}');
@endif
chatbox.init();
});
</script>
chat.js
var chatbox = {
...
}
完整的脚本代码http://pastebin.com/7LhWq01U
聊天.jshttp://pastebin.com/nNgTtME1
您在分配给chatbox
的对象文字中使用chatbox
,这不起作用,因为聊天框尚未定义
这个未捕获的错误会使整个chat.js
脚本的执行停止,这就是为什么chatbox
在以下脚本中也是undefined
。
因此,从chat.js
的第17行开始,您必须找到在对象的多个位置引用$chatbox
的方法
当您想要引用对象文字中先前定义的属性时,这是JavaScript中的一个常见问题。但问题是你不能,所以目前最快的解决方案是在对象外部声明一个$chatbox
变量,并从内部引用它。
由于左右声明全局变量肯定是不好的做法,这个问题可以通过以下两种方式更好地解决:
构造函数函数
创建一个构造函数,然后使用关键字new
创建对象的实例。这提供了对象初始化代码的封装,并允许您在需要时轻松创建多个聊天框对象
function Chatbox() {
var $chatbox = $('.chatbox');
this.$chatbox = $chatbox;
this.$input = $chatbox.find('.input input');
//...
}
var chatbox = new Chatbox();
如果你知道你的对象不会有多个实例,那么构造函数模式不会提供太多,可能只是一个额外的语法负担,所以你可以使用一种更轻的封装技术:
立即调用的函数表达式(IIFE)
您将所有对象初始化代码放在一个匿名函数中,该函数在末尾返回对象,然后在变量声明语句中调用该函数,该语句还提供初始化对象时需要声明的任何变量的封装。
var chatbox = (function() {
var $chatbox = $('.chatbox');
return {
$chatbox: $chatbox,
$input: $chatbox.find('.input input'),
// ^ This references the outer $chatbox variable, not this
// object's $chatbox property.
};
})();
相关文章:
- 面向对象JavaScript中的私有函数
- 对象 Javascript 中的标签无效 - 想要添加事件列表器
- 将字符串转换为对象 javascript/jquery
- 正在检查对象javascript中是否存在嵌套属性
- 时间-日期对象JavaScript getUTCMilliseconds
- 仅在对象(javascript)中解析值
- 使用对象(JavaScript或jQuery)填充选择下拉列表
- 引用另一个对象javascript中的对象
- 如何删除列表中的对象?Javascript nodejs和下划线
- 无法从日期对象javascript获取日期和月份
- 如何在if语句中使用对象-Javascript
- 对象javascript错误
- 对象Javascript的少数实例
- 位置对象Javascript
- 将字符串传递到对象javascript中
- 获取对象Javascript或jQuery的最后一个值
- 鼠标接近对象Javascript
- 这个mixins代码是书中的错误吗;面向对象JavaScript的原理”;
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- 访问对象javascript数组中的对象属性值