为什么这个变量的值没有定义
Why is the value of this variable undefined
我目前正在学习javascript,并遇到了这个示例
var t = function()
{
this.name = "Jam";
no = "123";
}
console.log(t.no); //Undefined
var m = new t();
console.log(m.name);
为什么第一个语句未定义?
t
是一个函数对象。与任何其他对象一样,函数也可以指定属性。因此,为了使代码工作,您应该将"123"
分配给函数的no
属性(A行):
var t = function()
{
this.name = "Jam";
}
t.no = "123"; // line A
console.log(t.no); // "123"
var m = new t();
console.log(m.name);
为什么第一个语句未定义?
因为t
没有属性no
。
首先,代码内部的功能,即
this.name = "Jam";
no = "123";
仅当函数被调用时才执行。您正在使用var m = new t();
执行此操作,它位于console.log(t.no);
之后。
其次,no = "123";
不会在函数对象上创建属性。它将尝试设置变量no
的值。由于该变量在您的示例中不存在,所以这一行将创建全局变量no
,或者在代码处于严格模式时出错。
考虑以下示例:
var no = 21;
function foo() {
no = 42;
}
console.log(no); // 21
foo();
console.log(no); // 42
因为t
是一个函数,它将由t();
执行。另一方面,no
是一个全局scooed变量,它可以在没有前缀的情况下从任何地方到达。
t
是一个函数表达式。您可以访问像t().no
这样的函数的返回对象,也可以使用该函数作为像这样的构造函数来创建一个新对象
myT = new t()
console.log(t.no);
但是no
变量只是函数内部的全局变量,它不是它返回的内容的一部分,也没有附加到构造函数的返回对象。
这里有一个非常好的教程,它深入地涵盖了所有这些主题。
相关文章:
- Socket.IO未定义变量
- 像createComment这样的各种自定义变量名在内联javascript中被覆盖,但在外部js中没有.为什么?
- 已定义变量出现未定义错误
- 使用eval()定义变量显示未定义的错误
- 在javascript变量中添加php定义变量
- 如何在来自另一个文件的控制器中定义变量
- 如何在不定义变量的情况下使用 document.createElement()
- 清除 Javascript 中窗口对象中的自定义变量
- 更改 Javascript 对象中所有未定义变量的值
- 定义变量是否比在 JS 中覆盖变量使用更多的资源
- 是否有类似Object.defineProperty的方法来定义变量
- coffeescript,类未定义变量
- 使用下划线未定义变量时发生抛出/捕获错误
- 如何为ajax定义变量,以及addeventlistener/pushstate函数?Javascript,而不是jQu
- 网络浏览器正在成为“;严格的“;用于Javascript中未定义变量的操作
- 使用window.location时未定义变量
- 在条件(if)结构的条件语句中是否有定义变量的有效方法
- 传递给数据的未定义变量
- bizzare未定义变量
- JavaScript 中全局范围内存在未定义变量的原因是什么?