戰鬥更輕鬆 玩家自制《最終幻想7:重製版》視距MOD
阿新 • • 發佈:2021-12-25
原型和例項物件
每一個函式天生都有一個原型(prototype),當函式被new關鍵字呼叫的時候,產生的例項的__proto__都指向次建構函式的prototype物件
function Person() {} console.log(Person.prototype);
function Person() {} var xiaoming = new Person(); console.log(xiaoming);
此時我們可以判斷一下這個xiaoming的__proto__是否等於Person建構函式的prototype
console.log(xiaoming.__proto__ == Person.prototype)
建構函式的prototype指向了誰,該例項的__proto__就指向誰
__proto__有什麼用?
所有的物件都有__proto__屬性,這個屬性指向的就是自己的“原型物件”,每一個物件在通過點語法訪問自己的屬性、方法的時候,都擁有原型鏈查詢(proto search)的功能。什麼叫做原型鏈查詢?如果當前對
象自己身上有這個屬性或者方法,則用自己的,如果沒有則沿著__proto__指向的原型物件中去查詢,如果在原型物件上有這個方法,則呼叫這個原型物件屬性或者方法
function Person(name,sex) { this.name = name;this.sex = sex; } Person.prototype.sayHello = function () { console.log("你好,我是" + this.name + ",我是一個" + this.sex + "生,") }; var xiaoming = new Person("小明", "男"); var xiaohong = new Person("小紅", "女"); console.log(xiaoming); console.log(xiaohong);
此時就可以看到方法是在原型物件上(也就是建構函式的原型上)
此時我們也可以驗證xiaoming和xiaohong呼叫的是同一個函式
console.log(xiaoming.sayHello == xiaohong.sayHello)
語法:
function 建構函式(屬性1,屬性2,屬性3) { this.屬性1 = 屬性1; this.屬性2 = 屬性2; this.屬性3 = 屬性3; } 建構函式.prototype.方法1 = function(){ } 建構函式.prototype.方法2 = function(){ } 建構函式.prototype.方法3 = function(){ }