JavaScript第九天筆記(原型)

原型

概述

在JavaScript中,函數是一個包含屬性和方法的Function類型的對象。而原型(Prototype)就是Function類型對象的一個屬性。
在函數定義時九包含了prototype屬性,他的初始值是一個空對象。在JavaScript中並無定義函數的原始類型,因此原型能夠是任何類型。
原型是用於保存對象的共享屬性和方法的,原型的屬性和方法並不會影響函數自己的屬性和放大。函數

獲取原型

1.經過構造函數的prototype屬性this

function fn(){
    console.log('this is function');
}
console.log(fn.prototype);

2.經過Object對象的getgetPrototypeOf()方法prototype

function fn(){
    console.log('this is function');
}
console.log(Object.getPrototypeOf(fn));

爲原型新增屬性或方法

  1. 構造函數.prototype.屬性名 = 屬性值
    構造函數.prototype.方法名 = function(){}
  2. 構造函數.prototype = {
    屬性名:屬性值,
    方法:function(){}

}code

構造函數的原型

/*定義構造函數*/
function Fun(){
    this.name = 'segment';
    this.sayMe = function(){
        console.log('this is function');
    }
}
//操做構造函數Fun的原型
Fun.prototype.age = 18;
// 利用構造函數來建立對象
var fun = new Fun();
console.log(fun);
// 爲構造函數的原型新增的屬性 -> 構造函數建立的對象中依舊能夠訪問
console.log(fun.age);// 18
// 對象fun中不存在age屬性
var result = Object.getOwnPropertyDescriptor(fun, 'age');
console.log(result);

自有屬性和原型屬性

自有屬性:構造函數自己的屬性
原型屬性:經過原型所定義的屬性對象

function Mingzi (name){
      this .name = name;
      this .sayMe = function(){
      console .log('this is function')
      }
}
Mingzi.prototype.age = 18;
var mingzi = new Hero('石原');

console.log(mingzi.name);// 石原
console.log(mingzi.age);// 18

var mingzi2 = new Mingzi('長澤雅嗎');
console.log(mingzi2.name);// 長澤雅美
console.log(mingzi2.age);// 18
Hero.prototype.age = 80;

console.log(mingzi.age);
console.log(mingzi2.age);

重寫屬性

經過構造函數或對象的自有屬性能夠重寫原型的屬性
自有屬性與原型屬性同名時,默認訪問的是自有屬性ip

// 定義構造函數
function Hero(){
    this.name = '張無忌';
}
// 構造函數的原型
Hero.prototype.name = '周芷若';
// 構造函數建立對象
var hero = new Hero();
console.log(hero.name);// 張無忌

// 刪除對象的屬性
delete hero.name;
// 從新訪問對象的屬性
console.log(hero.name);// 周芷若

檢測原型的屬性

Object.hasOwnProperty(prop)方法
做用 - 判斷當前指定屬性是否爲自有屬性
參數1.prop - 表示指定屬性名稱get

2.返回值 - 布爾值
  true - 表示存在指定的自有屬性
  false - 表示不存在指定的自有屬性

使用in關鍵字檢測對象的屬性
做用 - 判斷對象中是否存在指定屬性(自有屬性或原型屬性)
返回值 - 布爾值原型

true - 表示存在指定的屬性
 false - 表示不存在指定的屬性

顯示原型與隱式原型

每一個函數function都有一個prototype,即顯式原型
每一個實例對象都有一個__proto__,可稱爲隱式原型
對象的隱式原型的值爲其對應構造函數的顯式原型的值
函數的prototype屬性: 在定義函數時自動添加的, 默認值是一個空Object對象
對象的__proto__屬性: 建立對象時自動添加的, 默認值爲構造函數的prototype屬性值
咱們能直接操做顯式原型, 但不能直接操做隱式原型io

相關文章
相關標籤/搜索