myFoo = Foo(5)
과 myFoo = new Foo(5)
을 호출하는 것의 차이점은 무엇입니까? 이 객체를 반환하기 때문에
는 그 코드에 대한 차이가 없다, 그리고 spec는 말한다 :
- 이 결과가 [[전화] 내부를 호출의 결과하자 F의 속성 인 obj을
this
값으로 제공하고 [[Construct]]으로 전달되는 인수 목록을 args로 제공합니다.
Type(result)
이 Object
인 경우 결과는입니다.
이 함수는 결과 인 Object를 반환하므로 그 결과가 사용됩니다. 이 객체를 반환하지 않은 경우 당신은 차이를 느낄 것, 또는 예를 들어, this
를 확인하는 경우는로 재 작성하는 경우 :
function Foo(x) {
if (!(this instanceof Foo)) { return new Foo(x); }
this.bar = function() { return x; };
}
// Now instanceof works.
alert((new Foo) instanceof Foo);
자바 스크립트에 new
을하지 무엇을
, 어쨌든?
new
연산자 함수가 새로 그 원형이 기능의 속성이다 prototype
Object
생성 this
바인딩하여 호출되게.
사용자 정의 함수에 대한
는
new f(a, b, c)
언어 사양은 실제로 두 작업, [[Call]] 및 [[Construct]]과 기능을 정의하는,
// Create a new instance using f's prototype.
var newInstance = Object.create(f.prototype), result;
// Call the function
result = f.call(newInstance, a, b, c),
// If the result is a non-null object, use it, otherwise use the new instance.
result && typeof result === 'object' ? result : newInstance
주에 해당하므로 일부 코너 경우가 있습니다 new
이 이상하게 행동합니다.
는 예를 들어, 바인딩 및 내장 기능 :
var g = f.call.bind(f);
호출하는 함수를 정의해야한다, 너무 g
는 모든면에서 f
와 동일해야합니다, f
호출하지만
new g()
이 때문에
TypeError: function call() { [native code] } is not a constructor
을 생산 내장 함수 Function.prototype.call
은 을 지원합니다. [전화]은 아니지만 [0120]는이 아닙니다.
Function.prototype.bind
도 new
및 일반 전화와 다르게 작동합니다. this
값은 호출 될 때 항상 thisValue의 경계이지만, new
을 사용할 때 새로 생성 된 인스턴스입니다.
Google 검색 결과를 이해하지 못했고 더 나은 설명을 원하면 여기에 귀하의 snarky 코멘트가 어떤 도움이됩니까? –
@ChrisSobolewski OP가 그것에 대해 이해할 수없는 것을 모른다면 어떻게 도와 드릴까요? 무엇이 불분명한지 모르는 경우 어떻게 명확히 할 수 있습니까? – Jeff
@ChrisSobolewski, 어떤 사람들은이 사이트의 목적이 당신이 이해하지 못하는 것들을 정리한다는 것을 잊어 버립니다. 정확한 정보를 얻을 수 있고 그것을 이해했기 때문에. 이 사이트는 일을 정리하는 데 완벽하게 작동합니다. –