zoukankan      html  css  js  c++  java
  • 对象(三)

    1、原型的弊端

        function Person() {
        }
        Person.prototype = {
            constructor : Person,
            name : 'zs',
            age : 20,
            friends : ['王五','赵六']
        }
        var p1 = new Person();
        var p2 = new Person();
        p2.friends.push("xiao A");
        alert(p1.friends);          // 王五,赵六,xiao A
        alert(p2.friends);          // 王五,赵六,xiao A
        // 原型的属性和方法被所有的对象所共享

    改进方法一  : 

    2、组合原型和构造函数式

        function Person2(name, age, friends) {
            this.name = name;
            this.age = age;
            this.friends = friends;
        }
        Person2.prototype = {
            constructor : Person2,
            sayName : function () {
                alert(this.name);
            }
        }
        var p3 = new Person2("张三",20,["王五","赵六"]);
        var p4 = new Person2("李四",26,["王五","赵六","浅浅"])
        alert(p3.friends)           // 王五,赵六
        p3.sayName();               // 张三
        alert(p4.friends)           // 王五,赵六,浅浅
        p4.sayName();               // 李四

    3、动态原型模式

        // 动态原型模式  (将代码都封装到一起)
        function Person3(name,age,friends) {
            this.name = name;
            this.age = age;
            this.friends = friends;
            if(typeof this.sayName != "function" ){
                Person3.prototype.sayName = function () {
                    alert(this.name)
                }
            }
        }
        var p5 = new Person3("haha",20,['aa','bb']);
        var p6 = new Person3("heihei",22,['aa','bb','cc']);
        alert(p5.sayName == p6.sayName)             // true   说明 sayName 方法只被声明了一次

    4、稳妥构造函数式

        // 稳妥构造函数式 (应用在非常安全的环境中)
        // 1、没有公共属性    2、不能使用 this 对象
        function Person4(name,age,job) {
            // 创建一个要返回的对象发
            var obj = new Object();
            // 创建一些属性,属性为私有属性,函数外不能访问
            var name = name;
            obj.sayName = function () {         // 函数里定义方法来访问函数内的属性
                alert(name);
            }
            return obj;
        }
        var p7 = new Person4("aa");
        p7.sayName();           // aa
  • 相关阅读:
    ie条件注释
    css3之图片一闪而过特效
    css帧动画之图片发亮
    css3动画
    解决ie6不兼容透明图片
    jquery实现拖拽的效果
    原生js实现拖拽弹框的效果
    C++学习笔记十之连接数据库
    C++学习笔记九之异常处理
    C++学习笔记八之STL内置算法
  • 原文地址:https://www.cnblogs.com/debra/p/7804500.html
Copyright © 2011-2022 走看看