Make 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" after bob.setFirstName("Haskell").
bob.getFullName() 应该返回 "Haskell Curry" after bob.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 fullName = firstAndLast;
  var arr = fullName.split(" ");
  var first = arr[0];
  var last = arr[1]; 
  this.getFirstName = function(){  
    return arr[0]; 
  };
  this.getLastName = function(){ 
    return arr[1]; 
  };
  this.getFullName = function(){  
    return fullName; 
  };   
  this.setFirstName = function(firstName){     
    fullName = firstName + " " + last;    
  };    
  this.setLastName = function(lastName){    
    fullName = first+" "+lastName;    
  };    
  this.setFullName = function(full){    
    fullName = full; 
    arr = fullName.split(" ");
    first = arr[0];
    last = arr[1]; 
  };
};
var bob = new Person('Bob Ross');
bob.getFirstName();

学习自

var makeCounter = function() {
  var privateCounter = 0;
  function changeBy(val) {
    privateCounter += val;
  }
  return {
    increment: function() {
      changeBy(1);
    },
    decrement: function() {
      changeBy(-1);
    },
    value: function() {
      return privateCounter;
    }
  }  
};
var Counter1 = makeCounter();
var Counter2 = makeCounter();
console.log(Counter1.value()); /* logs 0 */
Counter1.increment();
Counter1.increment();
console.log(Counter1.value()); /* logs 2 */
Counter1.decrement();
console.log(Counter1.value()); /* logs 1 */
console.log(Counter2.value()); /* logs 0 */

两个计数器 counter1 和 counter2 各自的独立。每个闭包都是引用自己词法作用域内的变量 privateCounter 。

posted @ 2019-04-03 15:10  予与未来  阅读(169)  评论(0编辑  收藏  举报