大綱
- 對(duì)象是怎么產(chǎn)生的
- 什么是原型
- 什么是原型鏈
總結(jié):
- 每一個(gè)構(gòu)造方法都對(duì)應(yīng)一個(gè)原型
- 訪問原型的方法:
- 構(gòu)造函數(shù).prototype
- 對(duì)象(實(shí)例).proto
- 實(shí)例(構(gòu)造方法)的原型還存在原型 實(shí)例.proto.proto,最終的原型指向了Object.prototype
- 訪問一個(gè)實(shí)例(對(duì)象)的屬性, 從實(shí)例的內(nèi)部開始查找 實(shí)例內(nèi)部 => 實(shí)例的原型 => 原型的原型 => 上一級(jí)原型 => Object的原型
- 若找到就返回
- 否則返回undefined
var obj = {};
var obj2 = new Object(); // Object是構(gòu)造方法,專門用來創(chuàng)建對(duì)象的
console.log(typeof Object);
var date = new Date(); // Date也是構(gòu)造方法
// 自定義的構(gòu)造方法
function Student(age,name) {
this.age = age;
this.name = name;
}
var stu1 = new Student(10,'Tom');
var stu2 = new Student(20,'孫強(qiáng)');
var stu3 = new Student(18,'感化');
console.log(stu1,stu2,stu3);
// 貓類
class Cat {
// 構(gòu)造方法
constructor() {
console.log('執(zhí)行構(gòu)造方法');
this.age = 2;
this.name = '布偶';
}
}
var cat = new Cat();
console.log(cat);
<script>
// 貓類
// class Cat {
// // 構(gòu)造方法
// constructor() {
// this.age = 2;
// this.name = '布偶';
// }
// say() {
// console.log('貓的名字是',this.name);
// }
// aaa() {
// console.log('aaaa');
// }
// bbbb() {
// console.log('bbbb');
// }
// }
// var cat = new Cat();
// console.log(cat);
function Cat() {
this.age = 2;
this.name = '布偶';
}
Cat.prototype.say = function () {
console.log(this.name);
}
Cat.prototype.aaa = function () {
console.log('aaa');
}
Cat.prototype.bbb = function () {
console.log('bbb');
}
var cat = new Cat();
console.log('prototype',Cat.prototype);
</script>
<script>
Object.prototype.bb = 1000;
function Cat() {
this.age = 2;
this.name = '布偶';
}
Cat.prototype.aa = 100;
var cat = new Cat();
console.log(Cat.prototype === cat.__proto__); // true
console.log(cat.__proto__.__proto__ === Object.prototype); // true
var date = new Date();
console.log(date.__proto__.__proto__ === Object.prototype); // true
console.log(typeof cat.age.toString());
</script>