JavaScript 학습 노트 – (new 키워드)

3903 단어
역할
는 객체 인스턴스를 작성합니다.이 대상은 사용자가 정의할 수도 있고, 일부 시스템이 자체로 가지고 있는 대역 구조 함수의 대상일 수도 있다.
묘사
대상 유형을 만들려면 이름과 속성을 지정한 함수를 만들어야 합니다.이러한 속성은 그 자체를 가리키거나 다른 대상을 가리킬 수 있습니다. 아래의 예를 보십시오.
코드 new hFive(...)가 실행될 때:
새 객체가 작성됩니다.그것은 hFive에서 계승한다.prototype. 구조 함수 hFive()가 실행됩니다.실행할 때 상응하는 참석자가 전송되고 상하문this는 이 새로운 실례로 지정됩니다.new hFive는 new hFive()와 동일하며 매개 변수를 전달하지 않는 경우에만 사용할 수 있습니다.만약 구조 함수가 '대상' 을 되돌려준다면, 이 대상은 전체 new에서 나온 결과를 대체할 것이다.만약 구조 함수가 대상을 되돌려 주지 않는다면 new에서 나온 결과는 단계 1에서 만든 대상입니다.ps: 일반적인 상황에서 구조 함수는 어떤 값도 되돌려 주지 않습니다. 그러나 사용자가 이 값을 덮어쓰려면 일반 대상을 되돌려 덮어쓰도록 선택할 수 있습니다.물론 되돌아오는 그룹도 덮어씁니다. 그룹도 대상이기 때문입니다.어떤 상황에서도 hFive와 같은 모든 대상에 새로운 속성을 추가할 수 있습니다.color = "Black"코드는 hFive에 새로운 속성 color를 추가한 다음 이 속성에 "Black"을 부여합니다.그러나 이 조작은 다른 대상에게 영향을 주지 않는다.
같은 유형의 모든 대상에 속성을 추가하려면 hFive라는 대상 유형에 속성을 추가해야 합니다.너는 hFive에게 줄 수 있어.prototype에 속성을 추가하는 방식으로 이전에 정의된 모든 실례에 속성을 추가합니다.이러한 속성을 정의하는 방식은 new 구조 함수를 통해 만들어진 모든 대상에게 영향을 줄 것이다. 왜냐하면 이 대상 유형을 공유하기 때문이다.
예를 들다.
(함수 hFive의 경우 설명)
1. 통과.'hFive에 추가하는 방법이나 속성은 new 키워드를 사용하는 실례의 대상은 계승되지 않지만 hFive 자체는 사용할 수 있습니다.
var hFive=function(){
    this.name=" @ ";
    this.url="h-five.com";
    this.says=function(){
        alert("hello guys! here is MoYu. Welcome to herer");
    }
}

hFive.other=function(){
    alert(" ' . ' 。");
}

var c=new hFive();
c.says();//hello guys! here is MoYu. Welcome to herer.
hFive.other();// ' . ' 。
c.other();//c.others is not a function

2. 원형 체인prototype을 통해 추가하는 방법으로 new 키워드를 사용한 실례의 대상은 계승되고 hFive 자체는 사용할 수 없습니다.
var hFive=function(){
    this.name=" @ ";
    this.url="h-five.com";
    this.says=function(){
        alert("hello guys! here is MoYu. Welcome to herer");
    }
}

hFive.prototype.other=function(){
    alert(" ' . ' 。");
}

var c=new hFive();
c.says();//hello guys! here is MoYu. Welcome to herer.
c.other();// ' . ' 。
hFive.other();//hFive.other is not a function

되는대로 지껄이다
hFive를 직접 사용하여 hFive 내부의 속성이나 방법을 가져오면 오류가 발생하고undefined나 hFive를 알립니다.says is not a function.이때 hFive는 하나의 함수(성명만 한 것과 같음)일 뿐 실행되지 않았기 때문에 위의 알림이 있을 수 있습니다. hFive()를 실행한 후에 hFive를 직접 사용하여 hFive 내부의 속성이나 방법을 가져오면 오류가 발생합니다. 이때 hFive()가 실행하는 상하문이 window이기 때문에 내부의this는 전역 대상인 window를 가리키며 window를 사용합니다.url 또는 window.says ()는 틀리지 않습니다.
이것저것 말하다
1. 다음 코드에서 f가 a()와 b() 방법을 호출할 수 있는지 여부
var F = function(){};
Object.prototype.a = function(){ console.log("O");};
Function.prototype.b = function(){console.log("F");};
var f = new F();
f.a();//0
f.b();//f.b is not a function
console.log(f instanceof Function);//false
console.log( typeof f);//true
F.b();//F

f는 a 방법만 호출할 수 있고 b 방법은 호출할 수 없습니다. new 키워드를 통해 만든 것은 하나의 대상 실례이고, 그는 하나의 대상이기 때문에 Object를 계승할 수 있습니다.prototype, a방법도 사용할 수 있습니다.Function을 통해.prototyp에서 추가하는 방법은 모든 Function 대상에게 사용할 수 있기 때문에 f는 b 방법을 호출할 수 없지만 F는 b 방법을 호출할 수 있습니다. 이것은 function 대상이기 때문에 function 대상은 Function을 계승합니다.prototype은 Function의 실례이기 때문에 Function 대상이기도 하고 b 방법을 사용할 수 있습니다.
2. 다음 코드, a의 값은 얼마이고 b의 값은 얼마입니다.
var a = {n: 1};
var b = a;
a.x=a = {n: 2};
console.log(b.x);//Object {n: 2}    
console.log(b);//Object {n: 1, x: Object}
console.log(a);//Object {n: 2}
console.log(a.x);//undefined

코드가 a.x=a={n:2}에 실행되면시, 값 부여 연산자는 오른쪽에서 왼쪽으로 값을 부여합니다. 우선 a={n:2},javascript는 새로운 대상을 만들고 a로 그것을 가리킵니다. a의 원래 값이 덮어쓰이고, 실행이 끝난 후에 a.x=a를 실행합니다. 그러나 이때 a.x의 a는 = 뒤에 있는 a가 아닙니다. a.x의 a는 예전의 a입니다. 즉 b(이전 a가 b에 복제되었기 때문에, 마지막 결과는 위와 같습니다.
참조 문서
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/new
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function
오리지널, 전재는 출처, 묵@어: www.h-five.com
전재 대상:https://www.cnblogs.com/hlere/p/5218216.html

좋은 웹페이지 즐겨찾기