JS 객체지향에 대한 자세한 소개(2)
메뉴 탐색, "JS 객체 지향 노트 1", 참고 도서: Ruan Yifeng의 "JavaScript Standard Reference Tutorial"
1. 생성자 및 새 명령
2. 이 키워드
3. 구성 함수 및 새 명령
4. 생성자 및 새 명령
5. 생성자 및 새 명령
6. 생성자 및 새 명령
7. 생성자 및 새 명령
8. 생성자 및 new command
1. 생성자와 new 명령어
1. 생성자
JavaScript 언어의 객체 시스템은 "클래스"가 아닌 생성 함수(생성자)와 프로토타입 체인(프로토타입)을 기반으로 합니다. )
-
일반 함수와 구별하기 위해 생성자 이름의 첫 글자는 일반적으로 대문자로 표시됩니다. 예: var Person = function(){ this.name = 'Wang Dachui' }
Features 생성자:
a.this
키워드는 생성할 객체 인스턴스를 나타내는 함수 본문 내에서 사용됩니다.this
关键字,代表了所要生成的对象实例;
b、生成对象的时候,必需用new
命令调用此构造函数
2、new
作用:就是执行构造函数,返回一个实例对象
var Person = function(name, age){this.name = name;this.age = age;this.email = 'cnblogs@sina.com';this.eat = function(){ console.log(this.name + ' is eating noodles'); } }var per = new Person('王大锤', 18); console.log(per.name + ', ' + per.age + ', ' + per.email); //王大锤, 18, cnblogs@sina.comper.eat(); //王大锤 is eating noodles
执行new命令时的原理步骤:
创建一个空对象,作为将要返回的对象实例
将这个空对象的原型,指向构造函数的
prototype
属性将这个空对象赋值给函数内部的
this
b.new
명령- 2.new 기능: 생성자를 실행하고 인스턴스 객체를 반환합니다
console.log('---- 返回字符串 start ----');var Person = function(){this.name = '王大锤';return '罗小虎'; }var per = new Person();for (var item in per){ console.log( item + ': ' + per[item] ); }//---- 返回字符串 start ----//name: 王大锤console.log('----- 返回对象 start ----');var PersonTwo = function(){this.name = '倚天剑';return {nickname: '屠龙刀', price: 9999 }; }var per2 = new PersonTwo();for (var item in per2){ console.log(item + ': ' + per2[item]); }//----- 返回对象 start ----//nickname: 屠龙刀//price: 9999
새 명령을 실행할 때의 원칙 단계:


내의 this
키워드에 할당하세요.


var Person = function(){ console.log( this == window ); //truethis.price = 5188; }var per = Person(); console.log(price); //5188console.log(per); //undefinedconsole.log('......_-_'); //......_-_console.log(per.price); //Uncaught TypeError: Cannot read property 'helloPrice' of undefined


var Person = function(){ 'use strict'; console.log( this ); //undefinedthis.price = 5188; //Uncaught TypeError: Cannot set property 'helloPrice' of undefined}var per = Person();
var Person = function(){ //先判断this是否为Person的实例对象,不是就new一个if (!(this instanceof Person)){return new Person(); } console.log( this ); //Person {}this.price = 5188; }var per = Person(); console.log(per.price); //5188
另外一种解决方式,就是在函数内部手动添加new命令:


var Person = function(){ //先判断this是否为Person的实例对象,不是就new一个if (!(this instanceof Person)){return new Person(); } console.log( this ); //Person {}this.price = 5188; }var per = Person(); console.log(per.price); //5188
二、this关键字


var Person = function(){ console.log('1111'); console.log(this); this.name = '王大锤';this.age = 18;this.run = function(){ console.log('this is Person的实例对象吗:' + (this instanceof Person) ); console.log(this); } }var per = new Person(); per.run();/* 打印日志: 1111 Person {} this is Person的实例对象吗:true Person {name: "王大锤", age: 18, run: function}*/console.log('---------------');var Employ = { email: 'cnblogs@sina.com', name: '赵日天', eat: function(){ console.log(this); } } console.log(Employ.email + ', ' + Employ.name); Employ.eat();/* 打印日志: --------------- cnblogs@sina.com, 赵日天 Object {email: "cnblogs@sina.com", name: "赵日天", eat: function}*/
1、this总是返回一个对象,返回属性或方法当前所在的对象, 如上示例代码
2、对象的属性可以赋值给另一个对象,即属性所在的当前对象可变化,this的指向可变化


var A = { name: '王大锤', getInfo: function(){return '姓名:' + this.name; } }var B = { name: '赵日天' }; B.getInfo = A.getInfo; console.log( B.getInfo() ); //姓名:赵日天//A.getInfo属性赋给B, 于是B.getInfo就表示getInfo方法所在的当前对象是B, 所以这时的this.name就指向B.name
3、由于this指向的可变化性,在层级比较多的函数中需要注意使用this。一般来说,在多层函数中需要使用this时,设置一个变量来固定this的值,然后在内层函数中这个变量。
示例1:多层中的this


//1、多层中的this (错误演示)var o = { f1: function(){ console.log(this); //这个this指的是o对象var f2 = function(){ console.log(this); }();//由于写法是(function(){ })() 格式, 则f2中的this指的是顶层对象window } } o.f1();/* 打印日志: Object {f1: function} Window {stop: function, open: function, alert: function, confirm: function, prompt: function…}*///2、上面代码的另一种写法(相同效果)var temp = function(){ console.log(this); }var o = { f1: function(){ console.log(this); //这个this指o对象var f2 = temp(); //temp()中的this指向顶层对象window } } o.f1(); /* 打印日志 Object {f1: function} Window {stop: function, open: function, alert: function, confirm: function, prompt: function…}*///表示上面两种写法是一样的效果,this的错误演示//3、多层中this的正确使用:使用一个变量来固定this对象,然后在内层中调用该变量var o = { f1: function(){ console.log(this); //o对象var that = this;var f2 = function(){ console.log(that); //这个that指向o对象 }(); } } o.f1();/* 打印日志: Object {f1: function} Object {f1: function}*/
示例2: 数组遍历中的this


//1、多层中数组遍历中this的使用 (错误演示)var obj = { email: '大锤@sina.com', arr: ['aaa', 'bbb', '333'], fun: function(){//第一个this指的是obj对象this.arr.forEach(function(item){//这个this指的是顶层对象window, 由于window没有email变量,则为undefinedconsole.log(this.email + ': ' + item); }); } } obj.fun(); /* 打印结果: undefined: aaa undefined: bbb undefined: 333 *///2、多层中数组遍历中this的使用 (正确演示,第一种写法)var obj = { email: '大锤@sina.com', arr: ['aaa', 'bbb', '333'], fun: function(){//第一个this指的是obj对象var that = this; //将this用变量固定下来this.arr.forEach(function(item){//这个that指的是对象objconsole.log(that.email + ': ' + item); }); } } obj.fun(); //调用/* 打印日志: 大锤@sina.com: aaa 大锤@sina.com: bbb 大锤@sina.com: 333 *///3、多层中数组遍历中this正确使用第二种写法:将this作为forEach方法的第二个参数,固定循环中的运行环境var obj = { email: '大锤@sina.com', arr: ['aaa', 'bbb', '333'], fun: function(){//第一个this指的是obj对象this.arr.forEach(function(item){//这个this从来自参数this, 指向obj对象console.log(this.email + ': ' + item); }, this); } } obj.fun(); //调用/* 打印日志: 大锤@sina.com: aaa 大锤@sina.com: bbb 大锤@sina.com: 333 */
4、关于js提供的call、apply、bind方法对this的固定和切换的用法
1)、function.prototype.call(): 函数实例的call
方法,可以指定函数内部this
的指向(即函数执行时所在的作用域),然后在所指定的作用域中,调用该函数。
如果call(args)里面的参数不传,或者为null、undefined、window, 则默认传入全局顶级对象window;
如果call里面的参数传入自定义对象obj, 则函数内部的this指向自定义对象obj, 在obj作用域中运行该函数


var obj = {};var f = function(){ console.log(this);return this; } console.log('....start.....'); f(); f.call(); f.call(null); f.call(undefined); f.call(window); console.log('**** call方法的参数如果为空、null和undefined, 则默认传入全局等级window;如果call方法传入自定义对象obj,则函数f会在对象obj的作用域中运行 ****'); f.call(obj); console.log('.....end.....');/* 打印日志: ....start..... Window {stop: function, open: function, alert: function, confirm: function, prompt: function…} Window {stop: function, open: function, alert: function, confirm: function, prompt: function…} Window {stop: function, open: function, alert: function, confirm: function, prompt: function…} Window {stop: function, open: function, alert: function, confirm: function, prompt: function…} Window {stop: function, open: function, alert: function, confirm: function, prompt: function…} **** call方法的参数如果为空、null和undefined, 则默认传入全局等级window;如果call方法传入自定义对象obj,则函数f会在对象obj的作用域中运行 **** Object {} .....end.....*/
위 내용은 JS 객체지향에 대한 자세한 소개(2)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Xiaohongshu 메모를 삭제하는 방법 Xiaohongshu 앱에서 메모를 편집할 수 있습니다. 다음으로 편집기는 Xiaohongshu 메모 삭제 방법에 대한 사용자 사진과 텍스트를 가져옵니다. 보세요! Xiaohongshu 사용 튜토리얼 Xiaohongshu 메모 삭제 방법 1. 먼저 Xiaohongshu 앱을 열고 메인 페이지로 들어가서 오른쪽 하단에 있는 [Me]를 선택하여 특별 영역으로 들어갑니다. 2. 그런 다음 내 영역에서 다음과 같이 메모 페이지를 클릭합니다. 3. 노트 페이지에 들어가서 오른쪽 상단에 있는 [점 3개]를 클릭합니다. 4. 마지막으로 기능 표시줄이 하단에 확장되고 [삭제]를 클릭하여 완료합니다.

Xiaohongshu 사용자로서 우리 모두는 게시된 노트가 갑자기 사라지는 상황을 경험해 본 적이 있을 것입니다. 이는 의심할 여지 없이 혼란스럽고 걱정스러운 일입니다. 이런 경우, 우리는 어떻게 해야 합니까? 이번 글에서는 "샤오홍슈에서 발행한 노트가 누락된 경우 어떻게 해야 할까요?"라는 주제를 중심으로 자세한 답변을 드리겠습니다. 1. Xiaohongshu에서 발행한 노트가 누락된 경우 어떻게 해야 합니까? 첫째, 당황하지 마십시오. 메모가 누락된 경우 침착함을 유지하는 것이 중요하며 당황하지 마십시오. 이는 플랫폼 시스템 장애 또는 운영 오류로 인해 발생할 수 있습니다. 출시 기록을 확인하는 것은 쉽습니다. Xiaohongshu 앱을 열고 "나" → "게시" → "모든 출판물"을 클릭하면 자신의 출판 기록을 볼 수 있습니다. 여기에서는 이전에 게시된 메모를 쉽게 찾을 수 있습니다. 3.다시 게시합니다. 발견된 경우

Xiaohongshu 노트에 제품 링크를 추가하는 방법 Xiaohongshu 앱에서는 사용자가 다양한 콘텐츠를 탐색할 수 있을 뿐만 아니라 쇼핑도 할 수 있기 때문에 이 앱에는 쇼핑 추천 및 좋은 제품 공유에 대한 콘텐츠가 많이 있습니다. 이 앱에서는 일부 쇼핑 경험을 공유하고, 협력할 판매자를 찾고, 메모에 링크를 추가하는 등의 작업도 할 수 있습니다. 이 앱은 편리할 뿐만 아니라 많은 전문가가 만들 수 있기 때문에 많은 사람들이 쇼핑에 기꺼이 이 앱을 사용합니다. 흥미로운 콘텐츠를 탐색하고 자신에게 맞는 의류 제품이 있는지 확인할 수 있습니다. 노트에 제품 링크를 추가하는 방법을 살펴보겠습니다. 샤오홍슈 노트에 제품 링크를 추가하는 방법 휴대폰 데스크톱에서 앱을 엽니다. 앱 홈페이지를 클릭하세요

WebSocket과 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 서론: 인터넷 기술의 급속한 발전과 함께 실시간 모니터링 시스템이 다양한 분야에서 널리 활용되고 있다. 실시간 모니터링을 구현하는 핵심 기술 중 하나는 WebSocket과 JavaScript의 조합입니다. 이 기사에서는 실시간 모니터링 시스템에서 WebSocket 및 JavaScript의 적용을 소개하고 코드 예제를 제공하며 구현 원칙을 자세히 설명합니다. 1. 웹소켓 기술

MySQL 쿼리 결과 배열을 객체로 변환하는 방법은 다음과 같습니다. 빈 객체 배열을 만듭니다. 결과 배열을 반복하고 각 행에 대해 새 개체를 만듭니다. foreach 루프를 사용하여 각 행의 키-값 쌍을 새 개체의 해당 속성에 할당합니다. 개체 배열에 새 개체를 추가합니다. 데이터베이스 연결을 닫습니다.

JavaScript 및 WebSocket: 효율적인 실시간 일기 예보 시스템 구축 소개: 오늘날 일기 예보의 정확성은 일상 생활과 의사 결정에 매우 중요합니다. 기술이 발전함에 따라 우리는 날씨 데이터를 실시간으로 획득함으로써 보다 정확하고 신뢰할 수 있는 일기예보를 제공할 수 있습니다. 이 기사에서는 JavaScript 및 WebSocket 기술을 사용하여 효율적인 실시간 일기 예보 시스템을 구축하는 방법을 알아봅니다. 이 문서에서는 특정 코드 예제를 통해 구현 프로세스를 보여줍니다. 우리

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

라이프스타일 공유 플랫폼 샤오홍슈는 음식, 여행, 뷰티 등 다양한 분야의 노트를 다루고 있습니다. 많은 사용자가 Xiaohongshu에서 자신의 메모를 공유하고 싶지만 방법을 모릅니다. 이 글에서는 Xiaohongshu에 노트를 게시하는 과정을 자세히 설명하고 플랫폼에서 특정 사용자를 차단하는 방법을 살펴보겠습니다. 1. Xiaohongshu에 노트 튜토리얼을 게시하는 방법은 무엇입니까? 1. 등록 및 로그인: 먼저 휴대폰에 Xiaohongshu 앱을 다운로드하고 등록 및 로그인을 완료해야 합니다. 개인센터에서 개인정보를 작성하는 것은 매우 중요합니다. 아바타를 업로드하고 닉네임과 소개를 입력하면 다른 사용자가 귀하의 정보를 더 쉽게 이해할 수 있을 뿐만 아니라 귀하의 메모에 더 집중할 수 있습니다. 3. 퍼블리싱 채널 선택: 홈페이지 하단에서 '메모 보내기' 버튼을 클릭하고 퍼블리싱하려는 채널을 선택합니다.
