javascript方法链接比较

时间:2017-05-21 15:52:42

标签: javascript

我试图链接ex1和ex2函数,并在比较链式方法中提供的值后显示true或false。

function test() {
   var ex1 = function(parm) {
      return this;
   }

   var ex2 = function(par) {
      return this;
   }

   var result = function() {
      console.log('compare and display a boolean result '+ex1(parm).ex2(par));
   }
};
var res = test();
res.ex1('Sam').ex2('Eddie').result();

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:4)

你可以这样做:



function Test() {
  this.ex1 = function(parm) {
    this.param1 = parm;
    return this;
  }

  this.ex2 = function(par) {
    this.param2 = par;
    return this;
  }

  this.result = function() {

    console.log('compare and display a boolean result ' + (this.param1 == this.param2));
  }
  //return this;
};
var res = new Test();
res.ex1('Sam').ex2('Sam').result();




编辑我的答案,以免污染 Ced 建议的全局命名空间。此外,如果你走这条路线,将你的方法从构造函数中移动到Test的原型对象。所以,作为一个例子,ex1应该写成

Test.prototype.ex1 = function(parm) {
               this.parm = parm;
               return this;
           }

其他方法也是如此。

答案 1 :(得分:0)

您可以使用对象文字,并使其更具可读性:

var Test = {
   that: function(param) {
      this.param1 = param;
      return this;
   },
   isEqualTo: function(param) {
      this.param2 = param;
      return this.param1 === this.param2;
   }
};

console.log(Test.that('abc').isEqualTo('cba')); // false
console.log(Test.that('123').isEqualTo('321')); // false
console.log(Test.that('asd').isEqualTo('asd')); // true
console.log(Test.that('tre').isEqualTo('tre')); // true

// or just reusing

Test.that('word');
console.log(Test.isEqualTo('drow')); // false
console.log(Test.isEqualTo('world')); // false
console.log(Test.isEqualTo('word')); // true

答案 2 :(得分:0)

function test() {
   var ex1 = function(parm) {
      return this;
   }

   var ex2 = function(par) {
      return this;
   }

   var result = function() {
      console.log('compare and display a boolean result '+ex1(parm).ex2(par));
   }
};

因此,当执行此操作时,它不会返回任何内容:

var res = Test();

因此res未定义。因此,根据定义,ex1不存在于未定义的位置。

res.ex1('Sam').ex2('Eddie').result();

我上面的答案建议是归还这个。 不要这样做。

function test() {
  this.ex1 = function(parm) {
    this.param1 = parm;
    return this;
  }

  this.ex2 = function(par) {
    this.param2 = par;
    return this;
  }

  this.result = function() {

    console.log('compare and display a boolean result ' + (this.param1 == this.param2));
  }
  return this;
};

当它进入函数this等于windows时。因此,您正在污染窗口对象。

你能做什么呢?

function Test() {
   this.parm;
   this.par;
   this.ex1 = function(parm) {
      this.parm = parm;
      return this;
   }

   this.ex2 = function(par) {
      this.par = par;

      return this;
   }

   this.result = function() {
      console.log('compare and display a boolean result '+ (this.parm === this.par));
   }
};
var res = new Test();

res.ex1('Sam').ex2('Eddie').result();

您调用new Test():创建一个新对象{},其中该值指向它。然后执行该功能。因此,对象现在包含函数,并且不会污染您的窗口。

答案 3 :(得分:0)

你可以返回一个内部函数的对象,如果调用了内部函数,则返回theresult而不使用另一个函数进行调用。



function test(value1) {
    return {
        equals: function (value2) {
            return value1 === value2;
        }
    };
}

console.log(test(1).equals(1));
console.log(test(1).equals(2));




为了使用上面的显式调用result,您可以在返回对象中添加结果属性,例如



function test(value1) {
    return {
        equals: function (value2) {
            return {
                result: function () {
                    return value1 === value2;
                }
            };
        }
    };
}

console.log(test(1).equals(1).result());
console.log(test(1).equals(2).result());




与具有所有属性

的对象几乎相同



function test(value1) {
    var v2,
        object = {
        equals: function (value2) {
            v2 = value2;
            return object;
        },
        result: function () {
            return value1 === v2;
        }
    };
    return object;
}

console.log(test(1).equals(1).result());
console.log(test(1).equals(2).result());