在JavaScript中,将我的函数注入库中而不更改函数的属性

时间:2015-12-07 00:36:28

标签: javascript

我需要注入自己的函数而不是现有函数,同时保留所有原始属性。所以给出了这段代码:

 var newFunc = function(foo) { return foo + 2; }
 // copy the old lib.func.* to the newFunc
 $.each(lib.func, function(k,v) { newFunc[k] = v; });
 lib.func = newFunc;

我需要将原始lib.func.bar2()替换为我自己的版本,同时保持其所有现有功能的完整性:

lib.func

以上似乎有效,因为当我调用SELECT C.CustomerID, C.FirstName, C.LastName, OT.Date_Ordered, OT.Status, CSR.EmployeeID, CSR.LastName, CSR.FirstName FROM Customer C JOIN CreditCard CC ON C.CustomerID = CC.CustomerID JOIN Order_Table OT (SELECT OT.Status FROM Order_Table OT WHERE OT.Status = 'Pending') ON CC.CreditCard_Number = OT.CreditCard_Number JOIN CustomerService_Rep CSR ON CSR.EmployeeID = OT.EmployeeID GROUP BY C.CustomerID, C.FirstName, C.LastName, OT.Date_Ordered, OT.Status, CSR.EmployeeID, CSR.LastName, CSR.FirstName; 时,结果为12,但这似乎过于复杂,可能会导致其他问题。什么是正确的方法?有没有办法以某种方式将<div class="col-lg-9"> <?php // Input form for choosing complaints foreach (Complaints::getComplaints() as $complaint) { ?> <div class="form-group"> <div class="checkbox"> <label> <input type="checkbox" name="complaints[]" data-chkgrp="complaints[]" data-error="Try selecting at least one..."> <?= Helper::sanitize($complaint->getName()) ?> </label> <div class="help-block with-errors"></div> </div> </div> <?php } ?> </div> 上下文绑定到newFunc?或其他一些方式?

2 个答案:

答案 0 :(得分:0)

您应该将属性分配给新功能,而不是旧功能:

$.each(obj.func, function(k,v) { newFunc[k] = v; });

答案 1 :(得分:0)

如果你想改变一个函数在被调用时的作用,而不是创建一个新的不同函数,那就需要改变[[Code]]内部属性,但大多数实现都不会暴露它。

但是,您可以尝试这种方法:

function code() {
  return 123; /* Whatever */
}
function f() {
  return code.apply(this, arguments); /* Redirect call to `code` */
}
f(); // 123
code = function() {
  return 'abc'; /* Whatever else */
};
f(); // 'abc