js对象原型方法和属性方法的检测,面向对象特征与封装类,改变this得指向性的方法

1.原型方法和属性方法的检测

        isPortotypeOf() 检测当前对象是否是基于对应构造函数创建出来得

        instanceof 用于判断变量得类型

        hasOwnProperty() 判断当前得属性和方法是否源于 对象构造函数内部

        in 判断当前对象是否具有对应属性和方法  通常用于 代码得健壮性

        例:

       

 function User(name, age, password, email) {

            this.name = name

            this.age = age

            this.password = password

            this.email = email

        }

        User.prototype.show = function () {

            console.log(this.name + "、" + this.age + "岁")

        }

        var user1 = new User("韩", 20, "hdy", "33@163.com")



        user1 instanceof User

        var k = User.prototype.isPrototypeOf(user1)

        console.log(k)                  //true



        var r = user1.hasOwnProperty("show")

        console.log(r)                  //flase



        var t = "show" in user1

        console.log(t)                  //true



 

        2. 面向对象特征:

        1.抽象性: 从对象分析业务

        2.封装性: 将属性和方法封装到对象里,方便维护、统一进行管理  便于二次开发   提高安全性

        3.继承性: 将对象得属性和方法进行传递 原型链,改变this得指向性问题

        4.多态性:一个类可以产生多种类型得对象  js无法做到!

        封装性:属性分为两大类

        共有属性:任何人在任何位置都可以任意得访问以及修改

        私有属性:必须达到某些条件才能更改或者访问

        安全性较高的属性定义为私有属性,不能随意访问更改

        用于js本身没有私有概念 ,只能用局部变量来模拟

        通过get 和set方法来实现 属性得获取和设置

        定义私有属性,如:

        function User1(name, age, password, email) {

            this.name = name

            this.age = age

            this.password = password

            var email = email

            this.getEmail = function (user) {

                if (user.name == "韩") {

                    console.log(email)

                } else {

                    console.log("权限不够")

                }

            }

            this.setEmail = function (email) {

                //加判定

                var reg = /^[A-Za-z\d]+([-_ .][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/

                if (reg.test(email)) {

                    alert("设置格式符合要求")



                } else {

                    alert("设置格式不符合要求")

                }

            }

        }

        var user2 = new User1("韩", 20, "hdy", "33@163.com")

        var user3 = new User1("东", 20, "hdy", "33163.com")

        user2.getEmail(user3)

        user2.getEmail(user2)

        user2.setEmail("33@163.com")

        user3.setEmail("33163.com")



 

        3. 改变this得指向性call和apply

       

 function User2(name, age, password, email) {

            this.name = name

            this.age = age

            this.password = password

            this.email = email

        }

        User2.prototype.show = function () {

            console.log(this.name)

        }

        User2.prototype.abc = function (a, b, c) {

            console.log(this.name +"+"+ a + b + c)

        }

        var user4 = new User2("韩1", 20, "hdy", "13@163.com")

        var user5 = new User2("韩2", 21, "hdy", "23@163.com")

        call方法 改变this得指向性

        .call() 第一个参数 改变得对象  后续参数传入方法对应得参数       

user5.show.call(user4)

user4.abc.call(user5,1,2,3)

        apply() 第一参数 改变得对象  第二个参数[]放入参数列表

       

 user4.abc.apply(user5,[1,2,3])

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值