欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript創(chuàng)建對象的3種方法

 更新時間:2016年11月02日 09:57:46   作者:tclyjy  
這篇文章主要介紹了javascript創(chuàng)建對象的3種方法,對比分析js創(chuàng)建對象三種方式的優(yōu)缺點,感興趣的小伙伴們可以參考一下

本文為大家分享了js創(chuàng)建對象的多種方法,分享個方法的優(yōu)劣,具體內容如下

第一種創(chuàng)建對象的方式:

創(chuàng)建JSON對象
推薦使用的場合: 作為函數(shù)的參數(shù),臨時只用一次的場景。比如設置函數(shù)原型對象。

 var object = {
  name: "Eric",
  age: 24,
  sayHi: function(){
   console.log("My name is "+ this.name + " this year is " + this.age + "years old.")
  }
 };

第二種創(chuàng)建對象的方式:

創(chuàng)建一個Object對象

 var object = new Object();
 object.name = "Eric";
 object.age = 24;
 object.sayHi = function(){....};

以上兩種創(chuàng)建對象方式的缺點:不能作為對象創(chuàng)建的模板,也就是不能用new進行構造新對象。

第三種創(chuàng)建對象的方式:

 function Person() {
  this.name = "Eric";
  this.age = 24;
  this.sayHi = function(){
   console.log(this.name);
  }
 }

 var object1 = new Person();
 var object2 = new Person();

這種創(chuàng)建對象方式解決了前兩種方式的缺點,可以作為對象創(chuàng)建的模板,可以一直復用創(chuàng)建出多個對象。

new運算符的作用:

執(zhí)行構造函數(shù)(new后面的那個函數(shù)),在構造函數(shù)內部創(chuàng)建一個空對象
把上一部創(chuàng)建的空對象跟構造函數(shù)的原型對象進行關聯(lián)
然后把this指向當前空對象
在構造函數(shù)執(zhí)行結束后,如果沒有return,把空對象返回給object

new運算符原理

第三種方式有個缺點: 對象的內部的函數(shù)會在每個對象中都存一份如果創(chuàng)建的對象非常多的話,那么非常浪費內存。函數(shù)的行為是所有對象可以共有,不需要每個對象都保存一份。所以,可以把函數(shù)放到原型中進行聲明,那么所有對象都有了公共的函數(shù),而且內存中只保留一份。所有的屬性寫到對象的內部

第三種方式beta1:

 function Person() {
  this.name = 'Eric';
  this.age = 24;
 }
 Person.prototype = {
  sayHi: function() {
  },
 };

 var object1 = new Person();
 var object2 = new Person();

繼續(xù)升級 beta2 :

 function Person(name,age) {
  this.name = name || "";
  this.age = age || "";
 }
 Person.prototype = {
  sayHi: function() {
  },
 };

 var object1 = new Person(name1,age1);
 var object2 = new Person(name2,age2);

問題:1、調用者如果傳遞參數(shù)的順序發(fā)生變化,那么廢了
問題:2、參數(shù)增減都會導致函數(shù)聲明變化,調用的地方也可能發(fā)生變化。

如何解決:繼續(xù)升級 beta3 :

 function Person(option) { //用一個對象把所有參數(shù)覆蓋
  this.name = option.name || "";
  this.age = option.age || "";
 }
 Person.prototype = {
  sayHi: function() {
  },
 };

 var object1 = new Person({
   name: "Eric",
   age: 24
  });
 var object2 = new Person({
   name: "XXX",
   age: xx
  });

繼續(xù)優(yōu)化,把初始化的代碼 放到init函數(shù)中

繼續(xù)升級 beta4 :

 function Person(option) {
  this._init(option);
 }
 Person.prototype = {
  _init: function (option){
   this.name = option.name;
   this.age = option.age;
  },
  sayHi: function(){
   console.log("HI");
  }
 };

 var object1 = new Person({
   name: "Eric";
   age: 24
  });
 object1.sayHi();

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

最新評論