开发者问题收集

将内部变量设置为等于数组长度的方法

2017-12-28
158

我在 Javascript 中编写了一个如下所示的对象:

var facebookFriends={
    name: "Ilias",
    friendsArray:["john", "anna"],
    friends:"",
    setFriends:function(){
	friends=friendsArray.length
    },
};

当我调用该函数时,我收到以下我无法理解的错误。

VM52:6 Uncaught ReferenceError: friendsArray is not defined
    at Object.setFriends (<anonymous>:6:2)
    at <anonymous>:1:17

有人能解释为什么会发生这种情况吗,因为数组已经定义? 不知何故,似乎该函数在调用之前未编译。

编辑:

最初的问题已经解决,但现在我想到了一个新主意: 如何在不使用 setter 方法的情况下初始化变量:

var facebookFriends={
    name: "Ilias",
    friendsArray:["john", "anna"],
    friends:"",
    friends:this.friendsArray.length,
};

现在出现另一个错误:

VM51:5 Uncaught TypeError: Cannot read property 'length' of undefined
    at <anonymous>:5:31
3个回答

您需要使用 this 访问两个属性( friendsArrayfriends

setFriends : function(){
    this.friends = this.friendsArray.length
},

Demo

var facebookFriends={
    name: "Ilias",
    friendsArray:["john", "anna"],
    friends:"",
    setFriends:function(){
	   this.friends=this.friendsArray.length
    },
};

console.log( "before invoking setFriends ",facebookFriends.friends);
facebookFriends.setFriends();
console.log( "after invoking setFriends ",facebookFriends.friends);
gurvinder372
2017-12-28

您必须使用 this 引用对象的属性。

var facebookFriends={
    name: "Ilias",
    friendsArray:["john", "anna"],
    friends:"",
    setFriends:function(){
	        this.friends=this.friendsArray.length;
    },
};

facebookFriends.setFriends();
console.log(facebookFriends.friends);
Ankit Agarwal
2017-12-28
var facebookFriends ={
    name : "Ilias",
    friendsArray : ["john", "anna"],
    friends : "",
    setFriends:function(){
	    this.friends = this.friendsArray.length
    },
};

facebookFriends.setFriends();
console.log(facebookFriends.friends);
Lalit
2017-12-28