> 웹 프론트엔드 > 프런트엔드 Q&A > 자바스크립트는 객체지향인가요?

자바스크립트는 객체지향인가요?

青灯夜游
풀어 주다: 2021-10-19 11:29:28
원래의
5591명이 탐색했습니다.

Javascript는 엄밀히 말하면 객체 지향 언어는 아니지만 객체 중심 및 이벤트 중심 프로그래밍을 기반으로 하는 클라이언트 측 스크립팅 언어입니다. 이유: 객체 지향에는 캡슐화, 상속 및 다형성이라는 세 가지 주요 기능이 포함되어 있지만 JavaScript에는 캡슐화만 있고 상속은 객체 지향이 아닌 상속만 시뮬레이션합니다.

자바스크립트는 객체지향인가요?

이 튜토리얼의 운영 환경: Windows 7 시스템, JavaScript 버전 1.8.5, Dell G3 컴퓨터.

Javascript는 엄밀한 의미에서 객체 지향 언어는 아니지만 객체 중심 프로그래밍을 기반으로 하는 클라이언트 측 스크립팅 언어로 객체를 생성할 수 있을 뿐만 아니라 기존 객체를 사용할 수도 있습니다.

JavaScript는 왜 객체 지향 언어가 아닌가?

객체 지향에는 캡슐화, 상속, 다형성이라는 세 가지 주요 기능이 포함되어 있기 때문입니다. JavaScript에는 캡슐화만 있고 상속은 객체지향이 아닌 시뮬레이션된 상속일 뿐입니다.

모두들 JavaScript에서는 모든 것이 객체이고 속성, 배열, 함수 등이 모두 객체라고 말했습니다.

JavaScript에는 오버로드가 없습니다

자바스크립트는 객체지향인가요?

JavaScript에는 나중에 정의된 동일한 이름의 함수가 이전 함수를 덮어쓰며 항상 마지막 함수만 호출됩니다. JS의 매개변수는 단지 기호일 뿐이며 두 개의 형식 매개변수가 정의되어 있으며 프로그래머의 편의를 위해 실제 매개변수만 전달할 수 있습니다.

형식 매개변수를 작성하지 않으면 실제 매개변수에 자리 표시자를 편리하게 사용할 수 없습니다. 이 경우 암시적 형식 매개변수인 인수[0]는 첫 번째 실제 매개변수에 액세스하는 데 사용되고, 인수[1]은 두 번째 실제 매개변수에 액세스하는 데 사용됩니다. , 등등.

함수를 사용하여 클래스 시뮬레이션

일반적으로 클래스 이름의 첫 글자는 대문자로 표시됩니다. 1. 클래스를 정의할 때 생성자가 있습니다. 2. 메소드의 속성 값은 함수입니다.

예:

<script type="text/javascript">
            function Student (sno,sname,age) {
                this.sno = sno;
                this.sname = sname;
                this.age = age;
                this.study  = function(){
                    alert(&#39;我是&#39;+this.sname+&#39;,我在学习&#39;)
                }
            }
            var stu = new Student(1,&#39;xiaoming&#39;,20);
            stu.study();
</script>
로그인 후 복사

Object 클래스를 사용하여 인스턴트 객체 생성

delete stu.name;//可以删除属性
로그인 후 복사

예:

<script type="text/javascript">
            var stu = new Object();
            stu.sno = 1;
            stu.sname = &#39;xiaoming&#39;;
            stu.age = 20;
            stu.study = function(){
                alert(&#39;我是&#39;+this.sname+&#39;,我在学习&#39;);
            }
            stu.study();
</script>
로그인 후 복사

상속 시뮬레이션

1 call() 함수를 사용하여 상속을 시뮬레이션합니다. apply() 상속 시뮬레이션 함수

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript">
            function Person (name,age) {
                this.name = name;
                this.age = age;
                this.eat = function(){
                    alert(&#39;姓名:&#39;+this.name+",年龄:"+this.age+",我在吃饭");
                }
            }
            function Student(sno,name,age){
                Person.call(this,name,age);//相当于super(name,age)
                this.sno = sno;
                this.study = function(){
                    alert(&#39;学号:&#39;+this.sno+&#39;,姓名:&#39;+this.name+",年龄"+this.age+",我在学习");
                }
            }
            var stu = new Student(1,&#39;xiaoming&#39;,22);
            stu.eat();
            stu.study();
        </script>
    </head>
    <body>
    </body>
</html>
로그인 후 복사

3. 프로토타입 프로토타입을 사용하여 상속 시뮬레이션

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript">
            function Person (name,age) {
                this.name = name;
                this.age = age;
                this.eat = function(){
                    alert(&#39;姓名:&#39;+this.name+",年龄:"+this.age+",我在吃饭");
                }
            }
            function Student(sno,name,age){
                Person.apply(this,[name,age]);//相当于super(name,age)
                this.sno = sno;
                this.study = function(){
                    alert(&#39;学号:&#39;+this.sno+&#39;,姓名:&#39;+this.name+",年龄"+this.age+",我在学习");
                }
            }
            var stu = new Student(1,&#39;xiaoming&#39;,22);
            stu.eat();
            stu.study();
        </script>
    </head>
    <body>
    </body>
</html>
로그인 후 복사

클래스의 프로토타입 속성을 통해 해당 클래스가 어떤 속성과 메서드를 가지고 있는지 알 수 있습니다.

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript">
            function Person (name,age) {
                this.name = name;
                this.age = age;
                this.eat = function(){
                    alert(&#39;姓名:&#39;+this.name+",年龄:"+this.age+",我在吃饭");
                }
            }
            function Student(sno,name,age){
                this.sno = sno;
                this.name = name;
                this.age = age;
                this.study = function(){
                    alert(&#39;学号:&#39;+this.sno+&#39;,姓名:&#39;+this.name+",年龄"+this.age+",我在学习");
                }
            }
            //1.创建父类对象
            var person = new Person();
            //2.子类.prototype = person;
            Student.prototype = person;
            //把父类的原型赋值给子类的原型,原型一致,模拟实现了继承。
            //但是会丢失子类的属性值,全变成了undefined,即使new 对象时加上了,也不起作用
            //打脸,xiaoming既吃饭也学习
            var stu = new Student(1,&#39;xiaoming&#39;,20);
            //动态的添加方法,即使在new对象之前没有这个方法
            Student.prototype.test = function() {
                alert(&#39;test动态添加方法&#39;);
            }
            stu.eat();
            stu.study();
            stu.test();
        </script>
    </head>
    <body>
    </body>
</html>
로그인 후 복사

【관련 추천:

javascript 학습 튜토리얼

위 내용은 자바스크립트는 객체지향인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿