原型及面向对象相关内容

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

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

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

js在模拟面向对象

js是一门基于面向对象的语言  --- 不是真正的面向对象

对象的特点:属性 + 方法

对象在js里面是由构造函数new出来的

面向对象

工厂模式

        // 工厂模式
        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 
        // }

new的贡献:

          1 创建了一个对象

          2 this指向了这个对象

          3 把这个对象的原型指向了构造函数的原型对象

          4 返回了这个对象

js面向对象的发展过程

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

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

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

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

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

js面向对象的模拟最终版

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

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

 如何封装构造函数

          普通的实现

            把普通代码中的变量变成属性

            把普通代码的代码块变成方法

            注意:this的改变

            提供公用的属性和方法

原型:

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

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

原型对象:

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

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

原型链:

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

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

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

prototype:

        每一个函数都拥有一个属性  prototype

        给构造函数提供共有的属性和方法

hasOwnProperty:

        hasOwnProperty()  -- 用于判断属性或者方法是不是自己的(还有可能是继承来的)

 typeof  判断数据类型 -- 可以准确的判断基本数据类型(只能知道是引用数据类型)

          number / string / boolean / undefined / object / function

           无法判断数组

Array.isArray()   // 布尔值

constructor  // 可以判断数组

instanceOf 用于判断一个对象是否是一个构造函数的实例化对象

es6 提供了class  

        class {

            constructor() {

                // 自身的属性和方法

            }

            // 共有的方法

        }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值