내가자바 스크립트 함수가 객체임을 어떻게 증명할 수 있습니까?
var foo = function(){}
typeof(foo)
를 사용하고 - 반환 자바 스크립트 개념은 모든 기능을 자바 스크립트 객체가 말할
동안 대신 객체의 기능?
내가자바 스크립트 함수가 객체임을 어떻게 증명할 수 있습니까?
var foo = function(){}
typeof(foo)
를 사용하고 - 반환 자바 스크립트 개념은 모든 기능을 자바 스크립트 객체가 말할
동안 대신 객체의 기능?
정수에 같은 일을 테스트
> x = function(){}
<- function(){}
> x.a = "Asd"
<- "Asd"
> x
<- function(){}
> x.a
<- "Asd"
이에 대해 정의되지 않은 과제
> x = 1
<- 1
> x.a = 123
<- 123
> x
<- 1
> x.a
<- undefined
첫 번째 결과 무엇보다도 사양이 명시 적으로있어 상태는 사실은 거기에 얼마나 객체는 많은 곳에서 here을 포함하여 "함수"라는 용어를 정의합니다.
기능
그것을 증명하는 많은 방법이있다,
경험적으로 서브 루틴으로 호출 할 수있는 개체 유형의 멤버,하지만 간단한 중 하나는 속성에 값을 할당하는 것입니다 그것은 :
var foo = function() { };
foo.myProperty = "my value";
console.log(foo.myProperty); // "my value"
또는 특이한 프로토 타입 하나를 (사용, 하지만 가능) 만 개체로 그것을 증명하는 프로토 타입이 될 수 있습니다
var foo = function() { };
var obj = Object.create(foo);
console.log(Object.getPrototypeOf(obj) === foo); // true
내 list of proper ways to test if a value belongs to the Object type를 참조하십시오. 기능을 객체로 감지합니다.
var func = function(){};
Object(func) === func; // true --> func is an object
좀 더 공식적인 증거를 원하는 경우에 당신이 ECMAScript Overview
기능, 예를 들어 사양을 볼 필요가있을 것이다는
가
당신은 아주 간단하게 이것을 증명 할 수있는 호출 개체입니다 :
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
을 넘는 프로토 타입 체인의 다음 단계가 Object.prototype
임을 보여줍니다.
다른 행은 Object.prototype
(은 심각하게 이것을 수행하지 않습니다.)에 속성을 추가 할 수 있으며 모든 개체에 존재한다는 것을 보여줍니다.이 경우 비어있는 객체, 빈 배열, Number
객체 및 Math.sqrt
함수에서 테스트합니다. Object.prototype
에 속성 (이 경우 함수)을 추가하면 다른 모든 속성도 속성을 얻습니다.
console.log (Function.prototype instanceof Object);
표현식으로 만들어지고 할당 될 수 있으며 (참조로) 비교 될 수 있으며 임의의 속성을 추가 할 수 있다는 사실은 충분합니까? – Lucero