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.稳妥构造函数

猜你喜欢

转载自www.cnblogs.com/chenxiaomei0104/p/10537918.html