2013-09-05 2 views
0

저는 자바 스크립트를 배우고 있는데 왜 자바 스크립트가 this.vanilla인지 이해하려고합니다.Javascript는 'this'의 사용에 대해 설명합니다.

는이 글을 쓰는 것과 같습니다

var SomeVariable = [1, "bean", vanilla ? vanilla : "Madagascar Bourbon"]; 

매개 변수 vanilla과 동일한 이름을 사용하여 매우 혼란 보인다. 여기 VanillaBean

var VanillaBean = function(vanilla, cinnamon) { 
    this.vanilla = [1, "bean", vanilla ? vanilla : "Madagascar Bourbon"]; 
} 
+0

당신이 구글에서 '이 자바 스크립트 "를 검색 시도? – elclanrs

+1

이것은 매우 큰 문제에 대해서는 매우 작은 질문입니다. 당신은 문제를 해결하기 위해 몇 가지 사례를 시도해야합니다. 아무도이 문제에 대한 답변을 제공하지 않습니다. – Eraden

+2

그것은'VanillaBean'이 어떻게 불려지 는가에 달려 있지만 아마도'new', 즉 [생성자 함수] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide)와 함께 호출됩니다./Working_with_Objects # Using_a_constructor_function). 이것은 또한 도움이 될 수 있습니다 : [객체 지향 자바 스크립트 소개] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript) –

답변

0

vanillacinnamon와라는 두 개의 인자를 수용하는 기능이다. 아래와 같이 호출 할 때 적어도 하나의 속성, vanilla으로 객체를 생성합니다 :

var flavour = new VanillaBean("cheap", 250); 

flavour.vanilla[1, "bean", "cheap"] 될 것입니다.

(감사 @FelixKling와 @의 t.niese.)

this는 생성하는 객체, 그리고 아무것도 아닌 다른 vanilla 재산을 말한다.

당신은

을 여전히 목록을 얻을 것입니다,하지만 그것은 단지 독립 변수가 아닌 모든 객체의 속성이 될 것이다 (아마, 음, window,하지만 ...) SomeVariable을 포함하는 첫 번째 버전을 사용한다면 객체
+0

더 나은 :) 당신은 함수가'new' 연산자로 호출되어야한다고 언급해야합니다. 그렇지 않으면 새로운 객체를 생성하지 않습니다. –

+0

Fixed, thanks @FelixKling :) – icedwater

+1

@FelixKling @icedwater ** invoked **는 'VanillaBean (...)', 'VanillaBean.call (somObj, ...)'및 '새 VanillaBean (...)을 의미 할 수 있습니다. 내가 틀렸어? 그렇다면'new'로 호출하면 객체를 생성합니다. –

0
var a = {}; 

this : function가 회원이기 때문에이 경우에 this

a.test = function() { return this; }; 

a 것이다. 이 경우 b에서

a.t = function() { 
    var b = function() { return this; }; 
    b(); 
}; 

thiswindow 그래서 아무것도의 구성원이 아닙니다.

this을 이해하려면 누가 자신의 기능을 확인하고 소유자가없는 경우 창을 나타냅니다. 소유자가없는 모든 기능은 창에 의해 자동으로 소유됩니다.

추가 임시로 소유자 전화를 변경할 수 있습니다.

var b = function() {}; 
var c = { d: 1 }; 
b.call(c); 

통화 기능은 일시적으로 c에 소유자를 변경하고 thisc 될 것입니다.

새 인스턴스 만들기. 이 경우에 this

function E() { this.h = 2; } 
E.prototype = { f: 1 }; 
E.prototype.g = function() { return this; }; 
var e = new E(); 
e.g(); 

e이다. prototype은 새 오브젝트가 처음에 어떻게 보이는지 설명 할 수있는 구조를 제공합니다. 여기서는 { h: 2, g: func, f: 1 }이됩니다.

+0

무엇을'var b = function() {return this; };'b();를 호출하면 리턴된다. –

+0

죄송합니다, 형편 없음. 일반적으로 바인딩되지 않은 함수는 호출하지 않습니다. – Eraden

0

html 요소에서 사용되는 경우 this은 DOM의 요소를 참조합니다.

예 : this 비 복귀 기능에서 사용된다

<script type="text/javascript"> 
    function hover(domElement) { 
     domElement.style.backgroundColor = '#CCC'; 
    } 
</script> 
<div onmouseover="hover(this);">Hover me</div> 

이 함수는 객체의 생성자되고, this 함수가 호출 될 때 자동 복귀 도착 내재적 생성 된 객체를 의미 new.

예 :

function Point(x, y) { 
    this.x = x || 0; 
    this.y = y || 0; 
    this.distance = function (point) { 
     return Math.sqrt(
      Math.pow(point.x - this.x, 2) + 
      Math.pow(point.y - this.y, 2) 
     ); 
    }; 
} 

var a = new Point(10, 10); 
var b = new Point(100, 100); 

document.write(a.distance(b)); 

thisnew없이 동일한 기능 :

function Point(x, y) { 
    obj = {}; 

    obj.x = x || 0; 
    obj.y = y || 0; 
    obj.distance = function (point) { 
     return Math.sqrt(
      Math.pow(point.x - this.x, 2) + 
      Math.pow(point.y - this.y, 2) 
     ); 
    }; 

    return obj; 
} 

var a = Point(10, 10); 
var b = Point(100, 100); 

document.write(a.distance(b)); 
관련 문제