• 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>

  • 相关阅读:
    为什么我们不能坚持到底?
    追从本心,笑斩荆棘
    走出浮躁的泥沼:关于技术与工作
    走出浮躁的泥沼:仅专注就能胜过大部分人
    学不进去?可以试着这么做……
    走出浮躁的泥沼:浮躁的社会原因
    spring-quartz.xml
    1 web.xml配置详解
    多线程学习二
    多线程学习
  • 原文地址:https://www.cnblogs.com/canceler/p/4523764.html
Copyright © 2020-2023  润新知