为什么Function.prototype.bind()从函数中“删除”自定义属性?

时间:2016-09-07 08:32:17

标签: javascript

我试图理解为什么.bind()从函数中删除自定义属性。 当我更改“删除”_$something方法的函数的上下文时实际发生了什么?

function xxx(){
//do nothing
}
xxx._$something = 'something';
document.getElementById('id1').innerText = xxx._$something;
//'something'

var functions = [];

functions.push(xxx);
document.getElementById('id2').innerText = functions[0]._$something;
//'something'

functions.push(xxx.bind({}));
document.getElementById('id3').innerText = functions[1]._$something;
//'undefined'

console.log(functions[1]); //logs xxx

JS fiddle

1 个答案:

答案 0 :(得分:5)

ViewSuper不删除任何内容,它会返回函数。

来自the MDN

  

bind()方法创建一个新函数,当被调用时,它具有它   此关键字设置为提供的值,具有给定的序列   调用新函数时提供的任何参数。

使其更加明显:

foreach my $reportFile (sort { getDateInName($b) <=> getDateInName($a)} @ReportFiles)
{
   my @fileData = readFile($reportFile);
   if(!@fileData)
   {
        outputLog("FAIL: File Doesnt Contain Any Data.");
        return;
   }
}

大致相当于

bind

在这两种情况下,原始功能都不会被复制,但包裹