最近做FreeCodeCamp的算法题 Made a Person 时遇到了问题。
要求
用下面给定的方法构造一个对象.
方法有 getFirstName(), getLastName(), getFullName(), setFirstName(first), setLastName(last), and setFullName(firstAndLast).
所有有参数的方法只接受一个字符串参数.
所有的方法只与实体对象交互.
检验要求
Object.keys(bob).length应该返回 6.bob instanceof Person应该返回 true.bob.firstName应该返回 undefined.bob.lastName应该返回 undefined.bob.getFirstName()应该返回 “Bob”.bob.getLastName()应该返回 “Ross”.bob.getFullName()应该返回 “Bob Ross”.bob.getFullName()应该返回 “Haskell Ross” afterbob.setFirstName("Haskell").bob.getFullName()应该返回 “Haskell Curry” afterbob.setLastName("Curry").bob.getFullName()应该返回 “Haskell Curry” 在bob.setFullName("Haskell Curry")之后.bob.getFirstName()应该返回 “Haskell” 在bob.setFullName("Haskell Curry")之后.bob.getLastName()应该返回 “Curry” 在bob.setFullName("Haskell Curry")之后.
我尝试了多次。
第一次:
var Person = function(firstAndLast) {
var arr = firstAndLast.split(" ");
var obj = {
first: arr[0],
last: arr[1],
getFirstName: function() {
return this.first;
},
setFirstName: function(first) {
this.first = first;
},
getLastName: function() {
return this.last;
},
setLastName: function(last) {
this.last=last;
},
getFullName: function() {
return this.first+" "+this.last;
},
setFullName: function(firstAndLast) {
var a = firstAndLast.split(" ");
this.first = a[0];
this.last = a[1];
}
};
};
报错信息:TypeError: bob.getFullName is not a function
第二次
var Person = function(firstAndLast) {//闭包运用
var arr = firstAndLast.split(" ");
var first=arr[0];//function内部用var声明的变量是局部变量,只有其子函数可以访问,外部无法访问
var last=arr[1];
return {//返回了一个对象
getFirstName:function() {
return first;
},
setFirstName:function(f) {
first = f;
},
getLastName:function() {
return last;
},
setLastName:function(l) {
last=l;
},
getFullName:function() {
return first+" "+last;
},
setFullName:function(fl) {
var a = fl.split(" ");
first = a[0];
last = a[1];
}
};
};
错误:不符合bob instanceof Person 应该返回 true.
第三次(完美通关)
var Person = function(firstAndLast) {//闭包运用
var arr = firstAndLast.split(" ");
var first=arr[0];//function内部用var声明的变量是局部变量,只有其子函数可以访问,外部无法访问
var last=arr[1];
this.getFirstName=function() {
return first;
};
this.setFirstName=function(f) {
first = f;
};
this.getLastName=function() {
return last;
};
this.setLastName=function(l) {
last=l;
};
this.getFullName=function() {
return first+" "+last;
};
this.setFullName=function(fl) {
var a = fl.split(" ");
first = a[0];
last = a[1];
};
};
总结
- 利用函数创建对象时,this关键字非常重要。通过this可以将属性绑定到对象上,成为对象的一部分。
- 运用函数创建对象时,不想绑定在对象上但现在函数里要用的变量用var声明,这样变量就是局部变量,函数外访问不到。
本文解析了FreeCodeCamp中的算法题MadeaPerson,详细介绍了如何使用闭包和this关键字来实现一个符合要求的Person对象,包括get和set方法。
876

被折叠的 条评论
为什么被折叠?



