功能绑定问题

时间:2018-08-06 20:18:50

标签: javascript

 let objFirst = {
    name: 'Bill',
    age: 55,
    getName: function () {
      console.log(this.name)
    },
    getAge: function () {
      console.log(this.age)
    }
 }
 function returnProp (obj) {
    //...code
 }
 let objSecond = returnProp (objFirst );
 objSecond.getName(); //Bill
 objSecond.getAge(); //55

我知道可以这样解决

 function returnProp (obj) {
    return obj
 }

我想用'call','apply'或'bind'方法来做,但是不知道怎么做,有人可以解释吗?
我尝试了类似的方法,但是没有用。

 function returnProp (obj) {
       obj.getName.bind(objFirst)
       obj.getAge.bind(objFirst)
 }

2 个答案:

答案 0 :(得分:0)

我不确定我是否正确理解了您,但我希望这会有所帮助:

这将创建一个仅包含所需属性的新对象,该属性在调用时调用原始对象的方法。

let objFirst = {
  name: 'Bill',
  age: 55,
  getName: function() {
    console.log(this.name)
  },
  getAge: function() {
    console.log(this.age)
  }
}

function returnProp(obj) {
  return {
    getName: obj.getName.bind(obj),
    getAge: obj.getAge.bind(obj)
  }
}
let objSecond = returnProp(objFirst);
objSecond.getName(); //Bill
objSecond.getAge(); //55

答案 1 :(得分:0)

据我了解,您想克隆第一个对象而不是引用它。您应该查看lodash(_)。 Lodash具有cloneDeep()方法,可用于克隆整个对象。

du -b --max-depth=0  ./main_folder/data | awk '{print $1;}'