Jquery 为什么$document.referer为空。但当我使用document.referer时,它会返回我的值

Jquery 为什么$document.referer为空。但当我使用document.referer时,它会返回我的值,jquery,angularjs,jqlite,Jquery,Angularjs,Jqlite,需要价值 var referrer = $document.referrer; 在变量中。$document实际上是一个jqLite/jQuery查询结果soi属性不存在。如果您想获得推荐人,您可以: a直接访问DOM文档: $document.referrer 不建议这样做,因为编写单元测试时会遇到麻烦 b引用jqLite/jQuery结果中的对象: var referrer = document.referrer; 就我个人而言,我也不喜欢这种方法,代码变得丑陋和误导 c.文件:

需要价值

var referrer = $document.referrer;
在变量中。

$document实际上是一个jqLite/jQuery查询结果soi属性不存在。如果您想获得推荐人,您可以:

a直接访问DOM文档:

$document.referrer 
不建议这样做,因为编写单元测试时会遇到麻烦

b引用jqLite/jQuery结果中的对象:

var referrer = document.referrer; 
就我个人而言,我也不喜欢这种方法,代码变得丑陋和误导

c.文件:

然后获得推荐人:

myApp.config(function($provide){
  $provide.decorator('$document', function($delegate){

    $delegate.getReferrer = function() {return document.referrer;};

    // alternative you can create a property
    // Object.defineProperty($delegate, 'referrer', {  
    //   get: function() { return document.referrer; }
    // });

    return $delegate; 
  });
});
我更喜欢这个选项,因为你可以在单元测试中轻松地模拟这个对象,你的代码也更容易理解。

或者只是通过$window.document.referer引用它,这对测试来说是可模拟的。
myApp.config(function($provide){
  $provide.decorator('$document', function($delegate){

    $delegate.getReferrer = function() {return document.referrer;};

    // alternative you can create a property
    // Object.defineProperty($delegate, 'referrer', {  
    //   get: function() { return document.referrer; }
    // });

    return $delegate; 
  });
});
var referrer = $document.getReferrer();
//Or if you created a property...
//var referrer = $document.referrer;