是否可以直接在JavaScript对象中定义数组,然后对函数使用array.length属性?

是否可以直接在JavaScript对象中定义数组,然后对函数使用array.length属性?,javascript,arrays,Javascript,Arrays,我问这个问题的原因是,这个直接在对象中声明数组的代码将抛出以下错误:uncaughtreferenceerror:projects未定义 var client = { projects: ['a', 'b', 'c', 'd'], test: function() { return projects.length; } }; console.log(client.test()); 当然,我们可以声明变量,然后在对象中引用它,如下所示: var proj

我问这个问题的原因是,这个直接在对象中声明数组的代码将抛出以下错误:uncaughtreferenceerror:projects未定义

var client = {
    projects: ['a', 'b', 'c', 'd'],
    test: function() {
        return projects.length;
    }
};
console.log(client.test());
当然,我们可以声明变量,然后在对象中引用它,如下所示:

 var projects = ['a', 'b', 'c', 'd'];
    var client = {
        projects: projects,
        test: function() {
            return projects.length;
        }
    };
    console.log(client.test());

那就行了。但我真的想知道为什么世界上第一个给出错误的例子。有什么问题吗???

使用
this.projects.length

在对象上的函数中,
引用当前对象

请注意,这不适用于箭头功能:

var client = {
    projects: ['a', 'b', 'c', 'd'],
    test: function() {
        return this.projects.length;
    }
};
console.log(client.test());

test:()=>{
不起作用。但是,使用新的对象文字声明语法,您可以编写
test(){
那就行了。

返回这个.projects.length;
因为JS对象不是这样工作的?一些基本的JS O.O教程会很快帮你解决这个问题。@DaveNewton可怜的孩子,给他一些时间来发现这个问题。然后我们可以标记为复制他的。@n00dl3很公平-我已经在准备时删除了我的评论;)@daveNewton我知道我们可以用它来指代对象。我不清楚的是(也许对你来说这是因为你是个天才)为什么我们必须使用this关键字,在第一个例子中,很明显项目被定义为变量(就像第二个例子一样)1.我觉得这个问题比表面上看起来要深刻一些。