zoukankan      html  css  js  c++  java
  • javaScript高级程序设计--第6章面向对象--对象的创建

    检测对象类型:instanceof

    hasOwnProperty    实例对象.hasOwnProperty("属性名") //用于检测访问的是实例属性(返回true)还是原型属性(返回false);

    in   "属性名" in 实例对象   //不管属性是实例对象还是原型里的都会返回ture;

    注:同时使用 hasOwnProperty()方法和 in 操作符,就可以确定该属性到底是存在于对象中,还是存在于原型中;

    对象创建方法:

    1. object构造函数

    var person = new Object();

        person.name = "张三";

        person.age = 18;

       person.say = function(){alert("Hello World!")};

    2.对象字面量

    var person = {

            name : "张三",

            age : 18,

           say : function(){alert("Hello World!")}

        }

    3.工厂模式  //函数名首字母小写,要return出去  //这个方法的好处是避免了多个类似的对象重复创建,缺点没有解决对象的识别问题(即怎样知道一个对象的类型),由此引出了构造函数

    function creatPerson(name,age){

      var o = new Object();

      o.name = name;

      o.age = age;

      o.say = function(){ alert(o.name)};

      return o;

    }

    var person1 =creatPerson("张三",18);

    var person2 =creatPerson("李四",18);

    4.构造函数  //与工厂模式不同之处:a.没有显示的创建对象;b.直接将属性和方法指向了this对象; c.没有return; d.函数名首字母大写  //缺点每一个方法都要在每个实例上创建一次,由此引出了原型模式

    function CreatPerson(name,age){

      this.name = name;

       this.age = age;

       this.say = function(){ alert( this.name)};

    }

    var person1 =new CreatPerson("张三",18);

    var person2 =new CreatPerson("李四",18);

    alert(person1.say == person2.say); //false 

    构造函数经过以下步骤:

    1.创建一个新对象; 2.将构造函数的作用域赋值给新对象(即this指向新对象) ; 3.执行构造函数的代码(为新对象添加属性和方法) ; 4.返回新对象;

    5.原型模式

    functio Person(){};

    Person.prototype.name = "张三";

    Person.prototype.age = 18;

    Person.prototype.say = function(){ alert(this.name)};

    var person1 = new Person();

    var person2 = new Person();

    alert(person1.say() == person2.say())  //true

    原型模式的简化版

    functio Person(){};

    Person.prototype ={

         constructor:Person,  //

          name:"张三",

         age:18,

        say:function(){ alert(this.name)}

    }

    6.构造函数与原型组合模式

    function Person(name,age){

      this.name = name;

      this.age = age;

    }

    Person.prototype={

      constructor : Person,

      say : function(){ alert(this.name) };

    }

    var person1 = new Person("张三",18);

    var person2 = new Person("李四",20);

    7.寄生构造函数(与工厂模式差不多,个人觉得区别在于函数名首字母的大小写)

    function Person(name,age){

      var o = new Object();

      o.name = name;

      o.age = age;

      o.say = function(){alert(o.name)};

      return o;

    }

    var person1 = new Person("张三",15);

    person.say(); //张三

    8.稳妥构造函数

  • 相关阅读:
    STM32 ~ 查看系统时钟
    Allegro从.brd文件中导出器件封装
    Cadence原理图与Allegro交互
    Cadence关闭StartPage的方法
    emWin 移植
    python闭包
    python多线程之threading
    3.1决策树算法应用
    3.1决策树算法
    MyEclipse10 配置python的pyDev
  • 原文地址:https://www.cnblogs.com/chenxiaomei0104/p/10537918.html
Copyright © 2011-2022 走看看