1、建立物件的幾種方法
// 字面量
var obj1 = ;
//new object()
var obj2 = new object();
// 建構函式
function f(name)
var obj3 = new f('小三');
// object create() 乙個新物件,帶著指定的原型物件和屬性
var obj4 = object.create();
console.log(obj1);
console.log(obj2);
console.log(obj3);
console.log(obj4);
列印結果:
另外:object.create(proto,propertiesobject) // 建立乙個新物件,使用現有的物件來提供新建立的物件的__proto__。 //proto:新建立物件的原型物件 // propertiesobject引數為null或者乙個物件,如果是其他型別則會報錯。表示新增到新建立物件的可列舉屬性
那麼什麼是原型鏈呢?簡單來說就是組成原型的鏈,我們知道每個例項都有乙個屬性__proto__指向它的原型,而原型也是乙個物件,也有__proto__指向它的原型,這樣一層層找下去,就形成了原型鏈。最後是原型鏈有什麼作用呢?
function foo()
var obj5 = new foo('小明');
var obj6 = new foo();
obj5.__proto__.say = function () ;
obj5.say();
obj6.say();
列印結果:
發現都能列印,因為say()方法是新增在原型物件上的,例項obj5和obj6都是由foo()同乙個建構函式new出來的例項,所以obj5和obj6的__proto__指向同乙個原型物件,當給原型物件新增方法或者屬性時,obj5和obj6都能訪問到。這樣可以解決多個例項都用到同一方法時,直接給原型物件新增,而不必每乙個例項物件去新增乙個方法或者屬性。在訪問屬性或者方法時會先在例項物件上查詢,如果找不到就會往上找。
再來解釋一下__proto__,prototype,constructor的聯絡
例項是由建構函式new出來的乙個物件
例項的__proto__指向原型物件 obj5.__proto__ === foo.prototype
建構函式的prototype指向原型
原型的constructor指向它的建構函式 obj5.__proto__.constructor === foo
instanceof又是什麼作用呢?其實就是用來檢驗例項的__proto__和建構函式的prototype是不是指向同乙個原型物件。如果是,則返回true,否則返回false
詳談,原型與原型鏈
原型的作用就是實現屬性和方法的共享 js規定每乙個函式都有乙個proto屬性,指向另乙個物件 自身的原型 函式物件除了proto之外還有prototype屬性,當函式作為建構函式建立例項時,該屬性就被作為例項物件的原型 當乙個物件呼叫自身不存在的屬性和方法時就會去自己的proto的前輩prototy...
JavaScript的原型鏈
首先介紹下原型 原型的作用 把方法放到原型中,就可以讓同型別的物件共享 當我建立乙個建構函式。建構函式裡有原型。通過 建構函式名.prototype獲取到當前建構函式的原型。function student name,age,gender this.sayhi function 原型內部自帶乙個co...
JavaScript原型以及原型鏈
原型物件的用途是為每個例項物件儲存共享的方法和屬性,它僅僅是乙個普通物件而已。並且所有的例項是共享同乙個原型物件,因此有別於例項方法或屬性,原型物件僅有乙份。在訪問乙個物件的屬性的時候,首先在當前物件中找,如果沒有在其原型物件找 復用的內容放在prototype,讓類的例項擁有相同的功能 小紅書上的...