添加到函数对象的属性在哪里

时间:2014-09-07 14:47:49

标签: javascript function javascript-objects

function foo()
{
       var a=5;
 }

由于上面的函数是JavaScript对象,所以我们可以像foo.p=6一样向它添加属性。但是在执行console.log(foo)时,我无法看到对象的p属性,但可以通过foo.p和foo [' p']。

如果我们将foo视为JavaScript对象,我也无法访问foo.a

4 个答案:

答案 0 :(得分:2)

请尝试使用console.dir(foo);,其中列出了对象的属性。 concole.log只是输出值的一些表示,浏览器认为这将是有用的。

foo.a无法正常工作。 a本地变量,不是属性,仅在执行foo时存在。

答案 1 :(得分:2)

记录对象时,浏览器将选择如何在控制台中呈现它。这可能与在其上调用.toString()一样原始,或者像让您能够导航其属性一样复杂。

此外,控制台不是标准配置。浏览器可以实现它,但是为了方便起见,它们将保持一种共同的风格。但最终,这意味着它们会有所不同。

Internet Explorer:
IE

谷歌浏览器:
Chrome

请注意我必须使用console.dir()强制Chrome为我提供对象的可导航视图,而不是简单的.toString()表示。

答案 2 :(得分:0)

""是一个局部变量,这不能从函数外部访问。

你喜欢这样的事情:

var myClass = function(){
this.foo = 'bar';
}

var myInstance = myClass();
myInstance.foo // 'bar'

或作为普通对象:

var myObj = {
foo: 'bar'
}

myObj.foo // 'bar'
myObj.foo = 123;
myObj.foo // 123

答案 3 :(得分:0)

实现这一目标的方法很少。一种是在Javascript中使用对象,另一种是使用名为“模块模式”的对象。 对于使用对象,您可以执行以下操作:

function MyObject() {
  this.foo = "myObj";
}
var mo = new MyObject();
console.log(mo.foo); //Will print "myObj".

模块模式的工作原理如下:

var MP = (function(){}(
  var foo = "MP";
  return {
    foo : foo
  }

));
console.log(MP.foo); // Will print "MP"