为什么访问函数对象上的属性会给出未定义
Why accessing property on a function object gives undefined?
函数
对象Foo
时访问它的属性x
使用this
运算符给出undefined
。为什么?
function Foo(){
this.x = "bar";
return this;
}
console.log(Foo.x); //undefined
我相信声明一个函数 JS 会自动创建一个函数对象,您可以向其添加属性。例如,这有效:
Foo.today = "Sunday";
console.log(Foo.today); // Sunday
函数是对象。您将向调用函数Foo()
时this
引用的任何内容添加"x"属性,但代码中没有任何内容调用它。
如果要像这样调用函数:
Foo.call(Foo);
在检查 Foo.x
的值之前,它会起作用。但是,通常,函数调用中的 this
值不是对函数本身的引用。
您还可以执行以下操作:
Foo.x = "bar";
通常,将属性分配给函数中的this
,尤其是用作构造函数的属性,是为了管理对象(不是函数本身的对象(的属性。 所以:
var f = new Foo();
将为您提供一个具有名为"x"的属性和值为"bar"的对象。
只需删除return this;
并使用var f = new Foo()
即可。然后console.log(f.x)
就会起作用。
在非"严格"模式下,在您使用的上下文中,this
关键字默认为全局对象,因为它尚未通过调用函数本身来设置。因此,您只需在window
对象上设置x
属性即可。
调用 Foo.x 将返回'undefined'
因为 x 是一个实例(对象(属性而不是函数属性(Foo.x = "bar"
(。将 x 声明为类(函数(属性Foo.x = "bar";
而不是在 console.log(Foo.x)
中调用它。
在这种情况下,x
是实例属性(this.x ='bar'
(而不是类(function
(属性(如Foo.x='bar'
(来访问Foo.x
,Foo
必须"var foo = new Foo()
"实例化,而不是调用foo.x
返回x
的实例属性Foo's
。
相关文章:
- 将对象作为参数传递后的未定义属性
- 检查链接对象形式中未定义属性的最佳实践是什么
- PhantomJS中的evalute内部未定义属性
- 访问数字类型的未定义属性
- 如何处理未定义属性的未定义属性 javascript 类型错误
- 返回未定义属性的脚本
- 类型错误:无法读取 ng-repeat 的未定义属性
- JavaScript-Disqus如何处理其“;disqus_config”;包含未定义属性的函数
- 是对HTMLElement#样式的未定义属性的赋值的返回值,保证与赋值相同
- 最好检查未定义属性或设置为空
- 如何解决这个未定义属性的node.js错误?
- 如何在JavaScript中挽救对象的未定义属性?
- AngularJS和PHP -注意:未定义属性:stdClass
- 主干模型删除未定义属性
- if else子句中未定义对象的未定义属性
- Javascript数组问题:无法读取未定义属性
- 当尝试使用未定义属性进行筛选时,Lodash将排除项
- 在Javascript数组的中途未定义属性
- Knockout arrayForEach未定义属性
- javascript中未定义属性的简写,初始化和赋值属性