我是JavaScript的初学者,我发现一个非常令人困惑的概念.请考虑以下代码:
var person = { firstName :"Penelope", lastName :"Barrymore", // Since the "this" keyword is used inside the showFullName method below, and the showFullName method is defined on the person object,? // "this" will have the value of the person object because the person object will invoke showFullName ()? showFullName:function () { console.log (this.firstName + " " + this.lastName); } ? } ? person.showFullName (); // Penelope Barrymore
人是一个阶级或功能还是只是一个变量?
如果假设那个人是一个类,那么代码person.showFullName ();
是调用它的正确方法,因为在C#或我们编写的任何其他语言中
person perObj = new person(); perObj.showFullName();
?
person
是一个对象.它有3个属性,命名firstName
,lastName
和showFullName
.前两个属性包含字符串.最后一个属性包含一个函数.
当您使用语法调用函数时
,其中
求值对象并且
是其属性之一的名称,然后在函数运行时将特殊变量this
设置为对象.这就是如何this.firstName
以及this.lastName
能够访问对象的这些属性.
当只有一个对象时,此功能不是很有用,因为它可以轻松地使用该person
变量.但是你可以对多个对象使用相同的功能.
function showFull() { console.log(this.firstName + " " + this.lastName); } var person1 = { firstName: "Penelope", lastName: "Barrymore", showFullName: showFull }; var person2 = { firstName: "John", lastName: "Smith", showFullName: showFull } person1.showFullName(); // Penelope Barrymore person2.showFullName(); // John Smith
只是为了添加到Barmar,你也可以做到这样的事情(如果你发现它更类似于C#):
var person = function() { this.firstName = ""; this.lastName = ""; } person.prototype.showFullName = function () { console.log (this.firstName + " " + this.lastName); } var perObj = new person(); perObj.firstName = "Penelope"; perObj.lastName = "Barrymore"; perObj.showFullName();
这是一个对象,而不是一个类.
以这种方式考虑:
在其他经典的OO语言中,当您实例化一个类时,您会得到一个实例 ; 这个实例有点像JavaScript 对象 -
JavaScript对象是属性的动态"包".它是一组名称 - 值对,这些值可以是任何类型 - 函数或对象本身.
在你的情况下,firstName, lastName, and showFullName
是人物的适当对象.
您可以使用点(.)表示法访问对象的属性,例如: person.firstName, person.showFullName()