js原型详解(结合内存模型)

来源:互联网 发布:广告配音制作软件 编辑:程序博客网 时间:2024/05/22 12:32
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>js原型1</title>
    <meta name="author" content="ASUS" />
    <!-- Date: 2014-11-14 -->
    <script type="text/javascript">
    
    /**
     * 以下演示了通过原型的创建方式,使用基于原型的创建可以将属性和方法
     * 设置为Person专有的,不能再通过window来调用,如此就完成了封装
     * 原型是js中非常特殊一个对象,当一个函数创建之后,会随之就产生一个原型对象
     * 当通过这个函数的构造函数创建了一个具体的对象之后,在这个具体的对象中
     * 就会有一个属性指向原型
     */

        function Person(){
            
        }
        Person.prototype.name = "gui";
        Person.prototype.age = 20;
        Person.prototype.say = function(){
            alert(this.name+","+this.age);
        }
        
        var p1 = new Person();
       // p1.say();//gui,20
        p1.name="gui22";
      //  p1.say();//gui22,20
        var p2 = new Person();
       // p2.say();//gui,20
        //通过window没有办法调用say方法
        //say();
        
        //检测某个对象是否是某个函数的原型
       // alert(Person.prototype.isPrototypeOf(p1));//true
        
        //检测某个对象的constructor
      //  alert(p1.constructor == Person);//true
        
        //检测某个对象是否是自己的属性
        //alert(p1.hasOwnProperty("name"));//true,p1在自己的空间中设置了name属性
        //alert(p2.hasOwnProperty("name"));//false
        
        //删除某个对象的某个属性
      //  delete p1.name;
       //  alert(p1.hasOwnProperty("name"));//false,由于已经删除了
         
         //检测某个对象在原型或者自己中是否包含有某个属性,通过in检测
      //alert("name" in p1);
      //alert("name" in p2);
      //alert("gender" in p1);//gender(性别),在原型和自己的空间中都没有,false
     
    /**
     * 可以通过如下方法检测某个属性是否在原型中存在
     */

    function hasPrototypeProperty(obj,prop) {
        return ((!obj.hasOwnProperty(prop))&&(prop in obj))
    }
    
     alert(hasPrototypeProperty(p1,"name"));
     alert(hasPrototypeProperty(p2,"name"));
    </script>
</head>
<body>
</body>

</html>




0 0
原创粉丝点击