之间有什么区别
function person(first_name, last_name) {
this.first = first_name
this.last = last_name
}
和此:
function person(first_name, last_name) {
var first = first_name
var last = last_name
}
为什么只有第一个person.first
& person.last
可以在函数外部访问吗?
答案 0 :(得分:2)
编写构造函数时(使用new
) - 使用this.XXX
然后你做:
var p = new Person('s','d');
然后您就可以访问p.first
等。
在第二个例子中: 你没有创建任何属性..
你只是创建私人变量。
所以你无法访问它们......
答案 1 :(得分:2)
通过使用this.something你说这是一个对象,而且是他的财产。
通过使用var,你说它只是一个变量,而不是一个属性。
有关变量vs属性的更多信息: http://javascriptweblog.wordpress.com/2010/08/09/variables-vs-properties-in-javascript/
答案 2 :(得分:2)
变量生命周期在函数的花括号之间。 this
关键字允许访问其外部的函数属性。
绝对要看一下这个链接:https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope
答案 3 :(得分:2)
函数中的this
关键字称为调用上下文。
1)如果您将函数定义为对象的成员(方法):
myObject.someMethod = function() { this.x = 2; };
然后调用上下文this
是要添加方法的对象myObject
。因此,在调用上面的myObject.someMethod();
之后,myObject.x
就是2.成员x
在您调用方法之前是未定义的,除非您之前定义过它。
2)如果您使用函数作为new
关键字的构造函数,则this
引用正在创建的新对象:
function MyX() { this.x = 3; };
var myX = new MyX();
然后,您将属性myX.x
设置为3.
请注意,我调用了构造函数MyX()
,而不是myX()
。您应该致电Person()
,而不是person()
。它只是一个约定,但指示函数是用作构造函数是很有用的。
3)最后,如果您在既不是方法也不是构造函数的函数中使用this
,则this
引用全局对象({{ 1}}或等同于document
)。但请注意,如果您在window
模式下使用javascript(您应该这样做),strict
在这种情况下是未定义的,这意味着您基本上不能在函数中使用this
不是方法或构造函数。
您的具体问题涉及案例2),构造函数。构造函数中的this
只是设置新创建的对象的属性this.x = 3
。创建一些对象x
后,您可以使用myX
在外部访问和修改x
作为任何其他对象属性。
答案 4 :(得分:1)
'var'关键字使变量作用域。在最后一个示例中,var first和var last create只能在函数范围内访问。您可以在构造函数中将其视为局部变量。
答案 5 :(得分:1)
在javascript中,您将变量声明为
var variable
它只存在于您声明它的方法中。如果您希望每个人都可以访问变量(即全局变量),则必须在没有'var'部分的情况下声明变量
答案 6 :(得分:0)
您不一定要使用this
。如果你有这样的结构,它也可以正常工作:
Person = function(first_name, last_name) {
var first, last;
create(first_name, last_name);
function create(first_name, last_name) {
first = first_name
last = last_name
}
return {
firstName: first,
lastName: last
}
}