自定义原型链功能(Custom prototype chain for a function)

2019-09-17 05:50发布

我只是好奇,我是否可以将对象插入函数原型链。 我的意思是:

var test = function() { return 'a'; };

console.log(test.bind(this)); // return new bound function

// changing the prototype
// in console the prototype is really set as needed
// test => new object => function prototype => Object prototype
var F = function() {};
F.prototype = Function.prototype;
test.prototype = new F();

console.log(test.bind()); // this still works and returns new bound function

test.prototype.bind = function() {
    return 'test';
};

console.log(test.bind()); // this does not work as expected -> returns new bound function instead of 'test'. When I do delete Function.prototype.bind, then console.log(test.bind) returns undefined

Answer 1:

你有一个功能test 。 这是一个instanceof Function ,以及继承自Function.prototype ,这样就可以调用test.bind例如。

然后你你的函数的“原型”属性设置为一个对象继承Function.prototype 。 这意味着,所有实例test将来自该对象(以及从Function.prototype的)继承:

var t = new test;
t instanceof test; // => true
t instanceof Function; // => true

然后您覆盖您的自定义原型对象的测试性能。 你做的好做,因为功能的方法应该只在函数被调用(即调用对象):

>>> Function.prototype.bind.call({})
Unhandled Error: Function.prototype.bind: this object not callable

在与你的测试console.log你只适用于你的功能的方法test的功能,而不是它的实例。 好,因为他们会失败。 所以,我看不出有任何理由任何对象应该继承Function -你不能构建不直接从继承函数Function



文章来源: Custom prototype chain for a function