zoukankan      html  css  js  c++  java
  • javascript学习笔记09(构造函数,原型,)

    原型:

    <script type="text/javascript">
        /**
         * 以下演示了通过原型的创建方式,使用基于原型的创建可以将属性和方法
         * 设置为Person专有的,不能再通过window来调用
         */
        function Person(){
            
        }
        Person.prototype.name = "Leon";
        Person.prototype.age = 23;
        Person.prototype.say = function() {
            alert(this.name+","+this.age);
        }
        var p1 = new Person();
        p1.say();
        //通过window没有办法调用say方法,如此就完成了封装
        // say();
        </script>

    原型的四种状态:

    <script type="text/javascript">
        /**
         * 原型是js中非常特殊一个对象,当一个函数创建之后,会随之就产生一个原型对象
         * 当通过这个函数的构造函数创建了一个具体的对象之后,在这个具体的对象中
         * 就会有一个属性指向原型
         */
        //第一种状态
        function Person(){
            
        }
        //第二种状态
        Person.prototype.name = "Leon";
        Person.prototype.age = 23;
        Person.prototype.say = function() {
            alert(this.name+","+this.age);
        }
        //第三中状态,创建了一个对象之后会有一个_prop_的属性指向原型
        //在使用时如果在对象内部没有找到属性会去原型中找,_prop_属性是隐藏的
        var p1 = new Person();
        //p1.say();
        //以下方法可以检测出p1是否有_prop_指向Person的原型
        //alert(Person.prototype.isPrototypeOf(p1));
        
        //第四种状态
        var p2 = new Person();
        //是在自己的空间中定义了一个属性,不会替换原型中的属性
        p2.name = "Ada";
        //p2.say();
        //p1.say();
        
        // //检测某个对象是否是某个函数的原型
        // alert(Person.prototype.isPrototypeOf(p2));
        
        // //检测某个对象的constructor
        // alert(p1.constructor==Person);
        
        // //检测某个属性是否是自己的属性
        // alert(p1.hasOwnProperty("name"));//false,p1自己的空间中没有值
        // alert(p2.hasOwnProperty("name"));//true,p2在自己的空间中设置了name属性
        
        //delete p2.name;
        //p2.say();
        //alert(p2.hasOwnProperty("name"));//由于已经删除了,所以是false
        
        //检测某个对象在原型或者自己中是否包含有某个属性,通过in检测
        //alert("name" in p1);//true
        //alert("name" in p2);//true
        //alert("address" in p1);//在原型和自己的空间中都没有,false
        
        alert(hasPrototypeProperty(p1,"name"));//true
        alert(hasPrototypeProperty(p2,"name"));//false
        /**
         * 可以通过如下方法检测某个属性是否在原型中存在
         */
        function hasPrototypeProperty(obj,prop) {
            return ((!obj.hasOwnProperty(prop))&&(prop in obj))
        }
        </script>

  • 相关阅读:
    Java分层经验
    appium自动化测试之H5页面测试
    appium自动化测试日志收集-logging
    mysql查询实践题
    python每日一练之单元测试
    python每日一练之I/O实现读写csv文件
    python每日一练之读写txt文件
    selenium定位元素后,click不生效的问题。
    selenium自动化测试之浏览器滚动条
    selenium自动化测试之单选、下拉列表、alert弹窗处理、页面刷新
  • 原文地址:https://www.cnblogs.com/canceler/p/4523764.html
Copyright © 2011-2022 走看看