字面量:
var o1 =}
console.log(o1)
console.log(o1
instanceof object) //
true
new操作符:
var o2 = newobject();
o2.name = 'xiaoming';
o2.age = 20,
o2.sayhi = function
()console.log(o2)
console.log(o2
instanceof object) //
true
這種建立方式的缺點顯而易見,每建立乙個物件,都需要設定每乙個屬性,造成大量**重複。
functioncstudent(name,age)
returno;}
var o3 = cstudent('xiaoming',20);
var o4 = cstudent('xiaomei',18);
console.log(o3
instanceof object) //
true
工廠模式解決了上述**重複的問題,但是不知道當前物件是什麼型別,因為全部都是object。
function student(name,age)}var o5 = new student('xiaoming',20);
var o6 = new student('xiaomei',20);
console.log(o5.__proto__ == o6.__proto__) //
true
console.log(o5.age == o6.age) //
true
console.log(o5.sayhi == o6.sayhi) //
false
可以看到,o5和o6的原型物件是相同的,屬性age也是相同的,但是sayhi的方法是不同的。也就是說建構函式的例項物件可以繼承屬性,但是不能繼承方法。
functionperson() {}
person.prototype.name = 'xiaoming';
person.prototype.age = 20;
person.prototype.sayhi = function
() var o7 = new
person();
var o8 = new
person();
console.log(o7.sayhi == o8.sayhi) //
true
這裡將sayhi方法新增到了person的原型物件上,所以o7和o8訪問的都是同一組屬性和同乙個sayhi()函式。由此衍生出混合模式
functionstudent(name,age)
student.prototype =
}var o9 = new student('xiaoming',20);
var o10 = new student('xiaomei',20);
console.log(o9.age == o10.age) //
true
console.log(o9.sayhi == o10.sayhi) //
true
可以看出,混合模式共享著對相同方法的引用,又保證了每個例項有自己的私有屬性。最大限度的節省了記憶體。
functionstudent(name,age)
}}var o11 = new student('xiaoming',20);
var o12 = new student('xiaomei',18);
console.log(o11.sayhi == o12.sayhi) //
true
這裡只在sayhi()方法不存在的情況下,才會將它新增到原型中。
//new object() 方式建立
var b = new
object(a)
console.log(b)
//{}console.log(b.rep) //
方式建立
var b =object.create(a)
console.log(b)
//{}
console.log(b.__proto__) //
console.log(b.rep) //
new object() 通過建構函式來建立物件, 新增的屬性是在自身例項下。
object.create() es6建立物件的另一種方式,可以理解為繼承乙個物件, 新增的屬性是在原型下。
js 建立物件的幾種方式
一 原始方式 解釋 原始方法建立物件,通過new關鍵字生成乙個物件,然後根據js是動態語言的特性新增屬性和方法,構造乙個物件。其中this是表示呼叫該方法的物件。缺點 多次建立物件,則需要重複 多次,不利於 的復用。二 工廠模式 var getage function var getname fun...
js 建立物件的幾種方式
第一種 工廠模式 例1 function createobj name,age return o var per1 createobj 張三 20 per1.sayinfo 缺點 無法知道物件的型別 第二種 建構函式模式 例2 function person name,age var per2 ne...
js建立物件的幾種方式
雖然object建構函式或物件字面量都可以建立單個物件,但這些方式有個明顯的缺點,那就是使用同乙個介面創造很多物件,會產生大量的重複 所以產生了下面幾種模式。1 工廠模式 function createperson name,age,job o.name name o.age age o.job j...