JS笔记2 --定义对象

16.javascript中定义对象的几种方式(javascript中没有类的概念,只有对象):

1)基于已有对象扩充其属性和方法:

var object = new Object();
object.name
= "zhangsan";
object.sayName
= function(name){
  
this.name = name;
  alert(
this.name);
}
object.sayName(
"lisi");

2)工厂方式:

//工厂方式创建对象
function createObject(){

  var object = new Object();

  object.username = "zhangsan";

  object.password = "123";

  object.get = function(){

    alert(this.username + ", " + this.password);

  }

  return object;
}

var object1 = createObject();

var object2 = createObject();

object1.get();



//带参数的构造方法

function createObject(username,password){

  var object = new Object();

  object.username = username;

  object.password = password;

  object.get = function(){

    alert(this.username + ", " + this.password);

  }

  return object;
}

var object1 = createObject("zhangsan","123");

object1.get();



//让一个函数被多个对象共享,而不是每一个对象拥有一个函数对象

function get(){

  alert(this.username + ", " + this.password);

}

function createObject(username,password){

  var object = new Object();

  object.username = username;

  object.password = password;

  object.get = get;

  return object;
}

var object1 = createObject("zhangsan","123");

var object2 = createObject("lisi","456");

object1.get();

object2.get();

3)构造函数方式:

function Person(){

  //在执行第一行代码前,js引擎会为我们生成一个对象

  object.username = "zhangsan";

  object.password = "123";

  object.getInfo = function(){

    alert(this.username + ", " + this.password);

  }

  //此处有一个隐藏的return语句,用于将之前生成的对象返回

}

var person = new Person();

person.getInfo();



//可以在构造对象时传递参数

function Person(username,password){

  //在执行第一行代码前,js引擎会为我们生成一个对象

  object.username = username;

  object.password = password;

  object.getInfo = function(){

    alert(this.username + ", " + this.password);

  }

  //此处有一个隐藏的return语句,用于将之前生成的对象返回

}

var person = new Person("zhangsan","123");

person.getInfo();

4)原型 ("prototype")方式:

//使用原型 (prototype)方式创建对象

function Person(){

}

Person.prototype.username = "zhangsan";

Person.prototype.password= "123";

Person.prototype.getInfo = function(){

  alert(this.username + ", " + this.password);
}

var person1 = new Person();

var person2 = new Person();

person1.username = "lisi";

person1.getInfo();

person2.getInfo();



//
function Person(){

}

Person.prototype.username = new Array();

Person.prototype.password= "123";

Person.prototype.getInfo = function(){

  alert(this.username + ", " + this.password);

}

var person1 = new Person();

var person2 = new Person();

person1.username.push("zhangsan");

person1.username.push("lisi");

person1.password= "456";

person1.getInfo();

person2.getInfo();



//使用原型 + 构造函数方式来定义对象

function Person(){

  this.username = new Array();

  this.password= "123";

}

Person.prototype.getInfo = function(){

  alert(this.username + ", " + this.password);

}

var person1 = new Person();

var person2 = new Person();

person1.username.push("zhangsan");

person2.username.push("lisi");

person1.getInfo();

person2.getInfo();

5)动态原型方式:在构造函数中通过标志量让所有对象共享一个方法,而每个对象拥有自己的属性。

function Person(){ 

  this.username = new Array();

  this.password= "123";

  if(typeof Person.flag == "undefined"){

    alert("invoked");  

    Person.prototype.getInfo = function(){

      alert(this.username + ", " + this.password);

    }

    Person.flag = true;
  }

}

var person1 = new Person();

var person2 = new Person();

person1.getInfo();

person2.getInfo();
水袂分处,劳劳新亭;春风过耳,呦呦鹿鸣。 折柳为君,清余在心;人间流往,水墨无痕。 悠然来矣,思然去矣;片花飞融,时不在矣……
原文地址:https://www.cnblogs.com/zhengsha/p/5086455.html