Backbone.js 下划线isObject()有时不起作用

Backbone.js 下划线isObject()有时不起作用,backbone.js,underscore.js,Backbone.js,Underscore.js,当我使用nodeUnit为主干模型编写单元测试时,发生了一些奇怪的事情,问题可以总结为: var Player = Backbone.Model.extend({}); var player = new Player({name: 'Jacky'}); 然后我用:player.set('name','Scott')更新播放器名称。 但是我发现name属性根本没有更新(这个模型没有验证函数),还有一些奇怪的属性,比如:[0]:n[1]:a[2]:m[3]:e 如果我将update方法更改为pla

当我使用nodeUnit为主干模型编写单元测试时,发生了一些奇怪的事情,问题可以总结为:

var Player = Backbone.Model.extend({});
var player = new Player({name: 'Jacky'});
然后我用:player.set('name','Scott')更新播放器名称。 但是我发现name属性根本没有更新(这个模型没有验证函数),还有一些奇怪的属性,比如:[0]:n[1]:a[2]:m[3]:e

如果我将update方法更改为player.set({name:'Scott'}),效果会很好

我做了一些快速调查,发现Backbone.Model.set方法依赖于下划线.isObject()方法,后者的实现方式如下:

  _.isObject = function(obj) {
    return obj === Object(obj);
  };
我在nodeUnit测试用例中调用了isObject()方法,在第一种情况下,它可以正常工作,但在后一种情况下,它不能按预期工作,例如isObject('name')将返回true而不是预期的false


有人知道这是什么原因吗?

能否确保您使用的是最新版本的主干网?旧版本中的主干不支持
set
方法(
.set(key,value)
)的快捷方式版本,只允许使用属性/值对作为参数的对象


(我相信它是在0.9中添加的)

你能给我们看一下后面的测试用例吗?我可以给你看,但我担心这不会有帮助:
var requirejs=require('requirejs');requirejs.config({baseUrl:'public/javascripts'});requirejs([“app/cards”,“app/rank”],函数(cards,rank){exports['Card equals']=函数(test){test.ok(cards.smallJoker().equals(cards.smallJoker());test.done();};})
事实上是的,我使用的是主干版本0.9.2如果
名称
是使用
新字符串('name')创建的字符串,也会发生这种情况
-很尴尬,但这是
\uuObject
使用
字符串返回
true
的唯一方法,它是在浏览器中还是在nodejs/headless env中发生的?谢谢Tom Tu。但我不会使用类似于新字符串(“”)的任何东西。