0
点赞
收藏
分享

微信扫一扫

原型及面向对象相关内容

盖码范 2022-01-06 阅读 94

面向过程 --C 注重问题的解决

面向对象 --JAVA 完成对真实世界的模拟,把一个对象的共同特点抽离出现,有了所有的'属性'和'方法'

js并不是一个真正的面向对象的语言

js在模拟面向对象

面向对象

工厂模式

        // 工厂模式
        function dog(type , age) {  
            // 原材料
            const obj = {} ;
            // 加工
            obj.type = type ;
            obj.age = age ;
            obj.say = function () {  
                console.log('有一只' + obj.age + '岁的' + obj.type);
            }
            // 出厂
            return obj
        }


        const dog1 = dog('柯基' , 3) ;

        // 缺点
        //   创建出来的对象跟函数没有任何关系
        //   创建的出来的对象之间的方法不共享

认识new

        function fn() {  
            console.log(this);
            console.log(666);
        }


        var res = fn() ;   // this指向window
        console.log(res);  // 函数没有返回值 undefined


        var res2 = new fn() ;   // this指向了对象
        console.log(res2);   // 返回了这个对象


        // new 做了什么
        //   给函数添加了返回值  返回了一个对象
        //   把this指向了这个对象
        //   创建了一个对象


        // function ff() {  
        //     const obj = {} ;
        //     this -> obj ;
        //     return obj 
        // }

js面向对象的发展过程

          1 工厂模式   创建一个对象,给对象加工(添加属性和方法) , 返回这个对象

                缺点:创建出来的对象和函数没有关系 ,方法也不共享

          2 new  (创建对象,把this指向了这个对象和返回对象都由new完成了)

                解决的关系问题 , 方法依然不共享

          3 prototype 原型对象:提供共享的属性和方法

js面向对象的模拟最终版

           自身拥有的属性和方法写在构造函数中

           共有的属性和方法写在构造函数的原型对象上

原型:

        任何一个对象都有原型  __proto__  , 也就是这个构造函数

        每一个对象都有__proto__属性   ->  指向对应的构造函数的原型对象

原型对象:

           任何一个函数都有原型对象  prototype

           给所有的实例化对象提供共有的属性和方法

原型链:

            每一个对象都有原型,也就是__proto__这个属性,这个属性会指向这个构造函数函数的原型对象,也就是prototype,

            构造函数的原型对象也是对象,也有原型,他指向对象也就是Object的原型对象

            最终Object的原型对象也是对象,它的原型最终指向null

es6 提供了class  

        class {

            constructor() {

                // 自身的属性和方法

            }

            // 共有的方法

        }

        class Dog {
            constructor(type , age) {
                this.type = type ;
                this.age = age ;
            }
            say() {
                console.log('汪');
            }
            speak() {
                console.log(666);
            }
        }
举报

相关推荐

线程相关内容

路由相关内容

ESLint相关内容

多线程相关内容

AQS面试相关内容

Kafka相关内容复习

nginx相关内容的安装

0 条评论