Trong câu trả lời cho câu hỏi của bạn:
1)Function.prototype
là một loại chức năng bởi vì, theo ECMAScript 2015:
Đối tượng Chức năng nguyên mẫu là bản chất đối tượng% FunctionPrototype%. Đối tượng nguyên mẫu Function là chính nó là một đối tượng hàm dựng sẵn.
Đối tượng mẫu chức năng được xác định là đối tượng hàm để đảm bảo tính tương thích với mã ECMAScript được tạo trước thông số ECMAScript 2015.
Vì vậy, đối tượng mẫu Chức năng chỉ được định nghĩa là đối tượng Hàm để đảm bảo khả năng tương thích với các tiêu chuẩn ECMAScript cũ hơn. Hàm này không thực sự làm bất cứ điều gì:
Khi được gọi, hàm chấp nhận bất kỳ đối số nào và trả về không xác định.
http://www.ecma-international.org/ecma-262/6.0/#sec-properties-of-the-function-prototype-object
2) Về thuộc tính prototype:
Chức năng đối tượng nguyên mẫu không có một thuộc tính prototype.
Same Source
này là duy nhất vì tất cả các chức năng thường có một tài sản prototype
, tuy nhiên kể từ khi đối tượng Function nguyên mẫu được chỉ định như một đối tượng Chức năng để duy trì khả năng tương thích, đó là hành vi không giống như rằng các chức năng thông thường.
Tôi đã tạo một JSFiddle với các xét nghiệm khác nhau trong trường hợp nó giúp mọi người:
http://jsfiddle.net/Ld0b39xz/
// We'll use 'Object.getPrototypeOf' to access [[prototype]]
// As you know, [[prototype]] of Object.prototype returns 'null'.
console.log(Object.getPrototypeOf(Object.prototype));
// null
////////////////////////////////////////////////////////
// Let's take a closer look at Function.prototype
console.log(Function.prototype);
// Output:
// function(){}
// This is what the specs say should happen:
// "The Function prototype object is itself a built-in function object."
/////////////////////////////////////////////////////
// Let's see if this function has a 'prototype' property.
// All functions normally have a prototype property that initially
// references an empty object...except this one.
var fn = Function.prototype;
console.log(fn.prototype);
// Output:
// undefined
// This is expected, according to the specs:
// "The Function prototype object does not have a prototype property."
// It does have some properties such as 'name' and 'length',
// but not 'prototype'.
////////////////////////////////////////////////////////
// Let's see what [[prototype]] of Function.prototype returns.
console.log(Object.getPrototypeOf(Function.prototype));
// Output:
// Object{}
// Again this is expected:
// "The value of the [[Prototype]] internal slot of the
// Function prototype object is the intrinsic object %ObjectPrototype%"
/////////////////////////////////////////////////////////
// Now lets see what the [[Prototype]] of this object is:
console.log(Object.getPrototypeOf(Object.getPrototypeOf(Function.prototype)));
// Output:
// null
// We've come full circle since all the statement above is
// doing is looking for the prototoype of the native Object,
// which we already know is 'null' from our first test.
thông báo rằng 'chức năng Person() {} typeof Person.prototype // "đối tượng"' – Saar
chức năng cũng là đối tượng –
Object.getPrototypeOf (Function.prototype) === Object.prototype –