原型基本認知

2022-08-30 05:24:13 字數 1716 閱讀 3851

自定義建構函式的缺點:

如果在自定義建構函式內,給每乙個物件新增相同的方法,每生成乙個物件,都會開闢空間儲存方法,造成記憶體浪費

解決方法: 可以通過原型物件解決

1.  將共享的方法新增到原型物件上

2.  建構函式建立出來的物件的物件可以直接訪問原想的成員(屬性和方法)

首先先來認識一下原型

原型的三角關係:每個函式都有prototype屬性,指向原型

原型中有屬性constructor指向建構函式

例項中有屬性__proto_-指向原型

如下圖:

注意點: 不推薦直接通過__proto__修改屬性

需要通過建構函式.prototype來修改原型新增成員

原型上新增成員的注意點:

1.  建構函式上新增的成員,例項拿不到

2.  原型上新增的成員例項可以拿到

原型鏈乙個物件有自己的原型,原型也是乙個物件,有它自己的原型,一環扣一環,就形成了乙個原型鏈

由此對於例項來說,自己的屬性可以訪問,原型上的屬性可以訪問,原型鏈上的屬性也可以訪問

屬性搜尋原則:

例項去獲取屬性:自己有就訪問自己的,自己沒有在原型鏈上就近查詢

對於例項去設定屬性,只會對自身進行操作,如果屬性存在,就修改值,如果屬性不存在,就新增屬性,並賦值,不會對原型進行設定

對於object.prototype的成員的認識

首先object.prototype是所有物件的老祖宗,是原型鏈的頂端

所有object.prototype裡面的成員,所有的物件都可以訪問

1.hasownprototype

物件.hasownprototype(屬性名) 判斷屬性是否是自己的,而不是原型的

var obj =

console.log(obj.hasownproperty('name')) //

true

2.isprototypeof

a.isprototypeof(b) 判斷a是否是b的原型

function

person(name,age)

var p = new person('zs',12)

console.log(person.isprototypeof(p))

//false

3.tostring方法

object.prototype.tostring 判斷資料型別

array.prototype.tostring  轉字串(被重寫)

4.valueof

5.屬性名 in 物件 判斷屬性是否可以被物件訪問,自己的或者原型

instanceof

a instanceof b  判斷a是否是b的例項(或者理解為b.prototype是否在a的原型鏈上)

function person(name, age)

var p = new person()

1.p.constructor // ƒ person(){}

2.p.__proto__.constructor.name //person

3.p.constructor.name //person

mySql基本認知

事務,指它是乙個操作序列,要麼執行,要麼不執行,是乙個不可分割的工作單位。事務有著四大特性,acid。a 原子性,事務不可再分割,要麼發生 要麼不發生 c 一致性,事務在執行之前與執行之後的資料庫的完整性約束沒有被破壞,約束有 唯一約束,check約束,外來鍵約束 業務的一致性也得到保持。i 隔離性...

Web API 基本認知

作用 就是使用 js 去操作 html 和瀏覽器 分類 dom 文件物件模型 bom 瀏覽器物件模型 概念 dom document object model 文件物件模型 是用來呈現以及與任意 html 或 xml文件互動的api dom document object model 是將整個 ht...

printf函式的基本認知

學了這麼長時間的程式語言,無非都是講解所謂的函式和運算子的運用,我沒有買過課程感覺所有的東西都在跟我灌輸要學好基礎才能熟練地認識程式語言,一開始學習程式設計的第乙個例項的成功讓我倍感驕傲往往就是在講解函式的時候想睡覺了,今天逼著自己學習了所謂print函式的認識總結就是想睡覺,然後抄一下老師講解的用...