iWie können wir beweisen, dass JavaScript-Funktionen Objekte sind?
bin mitvar foo = function(){}
typeof(foo)
- kehrt Funktion anstelle von Object
während JavaScript-Konzept sagen, dass alle Funktionen in JavaScript-Objekte sind?
iWie können wir beweisen, dass JavaScript-Funktionen Objekte sind?
bin mitvar foo = function(){}
typeof(foo)
- kehrt Funktion anstelle von Object
während JavaScript-Konzept sagen, dass alle Funktionen in JavaScript-Objekte sind?
Wie wäre es damit für einen Test
> x = function(){}
<- function(){}
> x.a = "Asd"
<- "Asd"
> x
<- function(){}
> x.a
<- "Asd"
gleich auf einer ganzen Zahl Dadurch wird in undefinierte Zuordnung führen
> x = 1
<- 1
> x.a = 123
<- 123
> x
<- 1
> x.a
<- undefined
In erster Linie ist es die Tatsache, dass die Spezifikation ausdrücklich darauf hin, sie sind Objekte, in vielen Orten, einschließlich here, wo es den Begriff "Funktion" definiert:
Funktion
Mitglied der Objekttyp, der als Unterprogramm
Empirisch geltend gemacht werden kann, gibt es viele Möglichkeiten, es zu beweisen, aber eine der einfachsten ist es, ein Wert einer Eigenschaft zuweisen auf es:
var foo = function() { };
foo.myProperty = "my value";
console.log(foo.myProperty); // "my value"
Oder man als Prototyp verwenden (was ungewöhnlich ist, aber möglich), die sie als nur Objekte beweist können Prototypen sein:
var foo = function() { };
var obj = Object.create(foo);
console.log(Object.getPrototypeOf(obj) === foo); // true
meine list of proper ways to test if a value belongs to the Object type sehen.
Sie erkennen Funktionen als Objekte, z.
var func = function(){};
Object(func) === func; // true --> func is an object
Wenn Sie einen formalen Beweis möchten, müssen Sie in ECMAScript Overview
Funktion die Spezifikation, zum Beispiel sehen, ist eine aufrufbare Objekt
Sie diese einfach sehr beweisen können :
console.log(Object.getPrototypeOf(Function.prototype));
console.log(Object.prototype === Object.getPrototypeOf(Function.prototype));
// or, being evil
Object.prototype.testFn =() => console.log('Exists on all objects');
({}).testFn();
[].testFn();
(new Number(5)).testFn();
Math.sqrt.testFn();
Function.prototype
hinaus
Object.prototype
ist.
Die anderen Zeilen zeigen, dass Sie Object.prototype
(ernsthaft tun dies nie) eine Eigenschaft hinzufügen können, und es existiert für alle Objekte.In diesem Fall testen wir es an einem leeren Objekt, einem leeren Array, einem Number
Objekt und an der Math.sqrt
Funktion. Durch Hinzufügen einer Eigenschaft (in diesem Fall eine Funktion) zu Object.prototype
erhalten alle anderen die Eigenschaft ebenfalls.
console.log (Funktion.prototyp instanceof Object);
Die Tatsache, dass sie als Ausdruck erstellt werden und dass sie zugewiesen werden können, verglichen (durch Verweis) und dass Sie beliebige Eigenschaften hinzufügen können, sollte ausreichen, nein? – Lucero