zoukankan      html  css  js  c++  java
  • js17---创建对象:构造函数式和原型组合模式、动态原型模式、稳妥构造函数式

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>Untitled Document</title>
            <script type=text/javascript charset=utf-8 >
            //自定义原型对象会改变原型对象的构造器。
            //原型的概念: 原型对象里的所有属性和方法 被所有构造函数实例化出来的对象所共享
            function Person(){}
            Person.prototype = {
                constructor:Person , 
                name: 'z3' , 
                age:  20 , 
                job : '程序员' ,
                friends : ['李四','王五'] ,
                sayName : function(){alert('我的名字!')}
            };    
            var p1 = new Person();
            var p2 = new Person();    
            p1.friends.push('赵六');//数组的.push方法
            alert(p1.friends);//改了
            alert(p2.friends);
    
    
    
            
            //我们一般组合使用构造函数式和原型模式,在实际开发中,这种模式也是应用的最为广泛。
            // 组合使用原型和构造函数式 (定义一个类 开发时常用的方式),不能只用构造函数式或只用原型式。
            function Person(name , age , friends , job){
                this.name = name ; 
                this.age  = age ; 
                this.friends = friends ;
                this.job = job ;
            }
            Person.prototype = {
                constructor: Person , 
                sayName : function(){
                    alert(this.name);//谁调用sayName,this就是谁
                }
            };
            var p1 = new Person('z3' , 20 , ['王五','赵六'] , '技术总监');
            var p2 = new Person('李四', 25 , ['王五','赵六' ,'赵7'] ,'boss');
            alert(p1.friends);
            p1.sayName();
            alert(p2.friends);
            p2.sayName();
            
            
            
            
            
            //动态原型模式:(让你的代码 都封装到一起)。动态原型模式:就是把信息都封装到函数中,这样体现了封装的概念。
            function Person(name , age , friends , job){
                this.name = name ; 
                this.age  = age ; 
                this.friends = friends ;
                this.job = job ;
                //动态原型方法:
                if( typeof this.sayName != 'function'){//第一次new一个Person的时候会在原型添加这个方法,第二次new Person对象的时候就不会创建了。typeof是小写的function,constructor是大写的Function
                    Person.prototype.sayName = function(){
                        alert(this.name);
                    }
                }
            }    
            /*        
            var o = {
                name:2,
                age:"22"
            }
            alert(o.sayName);//undefined
            alert(typeof o.sayName);//undefined
            */        
            
            
            
            //稳妥构造函数式: durable object(稳妥对象) 非常安全的环境中
            // 1 没有公共属性 , 2 不能使用this对象
            function Person(name , age , job){
                    // 创建一个要返回的对象,工厂模式,
                    var obj = new Object();
                    //可以定义一下私有的变量和函数 private,js里面是var局部变量,外部访问不了,内部函数使用,类似于java里面通过private声明一些变量方法。
                    var name = name ; 
                    //var sex = '男';
                    //var saySex = function(){};
                    //添加一个方法
                    obj.sayName = function(){
                        alert(name);
                    }
                    return obj ;                
            }
            var p1 = new Person('张三');
            p1.sayName();
            </script>
        </head>
        <body>
        </body>
    </html>
  • 相关阅读:
    人脸识别总结(附开源项目代码与各大数据集下载路径)
    simpledet 的配置
    论文笔记--PCN:Real-Time Rotation-Invariant Face Detection with Progressive Calibration Networks
    smallcorgi/Faster-RCNN_TF训练自己的数据
    保存文件名至txt文件中,不含后缀
    训练 smallcorgi/Faster-RCNN_TF 模型(附ImageNet model百度云下载地址)
    调试 smallcorgi/Faster-RCNN_TF 的demo过程遇到的问题
    python字符串前缀和格式化
    摩斯电码与字母相互转换
    django配置mysql
  • 原文地址:https://www.cnblogs.com/yaowen/p/6868739.html
Copyright © 2011-2022 走看看