Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript backbone.js无法扩展路由器_Javascript_Backbone.js_Requirejs - Fatal编程技术网

Javascript backbone.js无法扩展路由器

Javascript backbone.js无法扩展路由器,javascript,backbone.js,requirejs,Javascript,Backbone.js,Requirejs,好吧,这很烦人 我将backbone.js与require.js一起使用。我试图在一个单独的文件中定义路由器,然后在页面上实例化它。我尝试了几种方法,但似乎只有一种有效,即: index.phtml require(['/js/accounting/invoice/index/router.js'], function(Router) { window.R = new (Backbone.Router.extend(Router)); }); js返回用于扩展路由器的对象。这是唯一对我

好吧,这很烦人

我将backbone.js与require.js一起使用。我试图在一个单独的文件中定义路由器,然后在页面上实例化它。我尝试了几种方法,但似乎只有一种有效,即:

index.phtml

require(['/js/accounting/invoice/index/router.js'], function(Router) {
    window.R = new (Backbone.Router.extend(Router));
});
js返回用于扩展路由器的对象。这是唯一对我有效的语法。这样写:

window.R = Backbone.Router.extend(Router);
不知何故产生了一个变量R,它是一个空函数


我的问题是为什么第一种方法有效而其他方法无效?我喜欢这一事实,它的工作,但我感到沮丧,我不知道为什么。这似乎与我在教程中看到的大不相同。

这是预期的行为

让我们看看你用第一种方法做了什么,第二种方法做了什么

主干通常有一个特殊的
。在初始化类原型之前,将
方法扩展到每个可以增强类原型的类

看起来是这样的:

var Model = Backbone.Model.extend({});
var myModel = new Model({ name: 'myModel' });
.extend
方法返回的是类本身,以及您提供的扩展属性。它基本上接受
.prototype
,并将指定的参数对象添加到其中。但是它不会初始化类。使用
newclassname()初始化类

因此,如果您看到第一种方法:

window.R = new (Backbone.Router.extend(Router));
它实际执行(等于):


在第二种方法中,您实际上使用非初始化的类对象将
window.R
赋值,而实际上非初始化的类对象只是一个普通的
函数

,因此我想不学习基本原理是不好的。谢谢:)
var a = Backbone.Router.extend(Router); // Your second approach ends here
window.R = new a();