ES5-11原型與原型鏈深入、對象繼承

原型

  • 誰調用,this就指向誰,當實例對象有該屬性時,不會去原型上查找
    在這里插入圖片描述
    在這里插入圖片描述
  • 創建對象的兩種方法:字面量、new Object()一般不用后面的
  • 二者創建出來的對象沒有差異在這里插入圖片描述

Object.create()

  • var 實例 = Object.create(對象/null)
  • 將對象或null作為實例的原型
    在這里插入圖片描述
  • new構造函數的時候做了什么
  • 實例化對象
  • 調用構造函數的初始化屬性和方法
  • 指定實例對象的原型在這里插入圖片描述
  • 將null作為實例的原型,原型中將不包含任何屬性!
  • 因此,不是所有對象都繼承Object.prototype
    在這里插入圖片描述
  • 無法查找到toString方法(沒有__proto__)
    在這里插入圖片描述
  • 手動增加的__proto__和自身的不一樣,沒有可以向上查找的原型鏈
    在這里插入圖片描述
var obj = Object.create(null)
obj.num = 1;
var obj1 = {count: 2
}
obj.__proto__ = obj1;
console.log(obj.count) // undefined
obj.toString() // 報錯
  • document.write接收字符串,當傳入非String類型時,會先調用相應的toString方法

  • 原始值是沒有屬性的,基本包裝類有屬性和方法(有toString)

  • 除了undefined、null,其他的基本數據類型(Number、String、Boolean)都有自己的toSting方法
    在這里插入圖片描述

  • 基本數據類型的toSting方法和Object.prototype的toSting方法不同
    在這里插入圖片描述

原型鏈

  • 原型鏈的終點是Object.prototype

對象繼承

  • 將父級的實例作為我的原型對象
function GrandFather() {this.name = '祖先'
}
var grandFatherObj = new GrandFather() // 將父級的實例作為我的原型對象function Father() {this.name = '父親'
}
Father.prototype = grandFatherObj
var fatherObj = new Father()
function Child() {this.name = '孩子'
}
Child.prototype = fatherObj
var childObj = new Child()
console.log('祖先實例', grandFatherObj)
console.log('父親實例', fatherObj)
console.log('孩子實例', childObj)
  • 祖先的實例中的__proto__指向祖先的原型對象,構造器指向構造函數GrandFather
  • 祖先原型對象里也有__proto__指向Object.prototype,構造器指Object構造函數
  • Object.prototype有toString方法
    在這里插入圖片描述
  • 孩子實例修改父親的引用數據類型的屬性
    在這里插入圖片描述
  • 孩子實例不能修改父親的基本數據類型的屬性
  • 對于++操作符 相當于student.students = 1 + student.students(先讀取再賦值),會在孩子實例上創建這個屬性
    在這里插入圖片描述

調用方法時改變函數內this指向

call\apply\bind
方法.call(this指向的對象,參數…)
方法.apply(this指向的對象,arguments)
在這里插入圖片描述

  • 插件計算器 方法寫在prototype里更合適
; (function () {function Compute() {this.plus = function (a, b) {return a + b}this.minus = function (a, b) {return a - b}}function FullCompute() {Compute.call(this)this.multi = function (a, b) {return a * b}this.divide = function (a, b) {return a / b}}window.FullCompute = FullCompute
})()
var myFullCompute = new FullCompute()
console.log('加', myFullCompute.plus(8, 2)) // 10
console.log('減', myFullCompute.minus(8, 2)) // 6
console.log('乘', myFullCompute.multi(8, 2)) // 16
console.log('除', myFullCompute.divide(8, 2)) // 4
function Car(brand, color) {this.brand = brandthis.color = color
}
function Person(name, age) {this.name = namethis.age = agethis.printFn = function () {Car.call(this, 'Bentley', '黑')console.log(this.name + this.age + '歲的生日禮物是一輛' + this.color + '色的' + this.brand)}
}
var me = new Person('Stephy', 20)
me.printFn()
console.log('me', me)

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251178.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251178.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251178.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法 --- 希爾排序、歸并排序、快速排序的js實現

希爾排序: function shellSort(arr) {let len arr.length;let temp, gap 1;while(gap < len/3) {gap gap*3 1}while(gap >1) {for(let i gap;i< len; i) {temp arr[i];for( var j i-gap; j> 0 && arr[j] > temp; j - gap) {arr[j gap] arr[j];}…

蘋果和蟲子問題C++

如果需要轉載&#xff0c;請注明出處&#xff1a;http://www.cnblogs.com/wongyi/p/8205305.html 最近在給小朋友補奧數課&#xff0c;順便看了幾道題目&#xff0c;覺得寫出來會比較集中&#xff0c;整理一下哈哈哈。 問題如下&#xff1a; 蘋果和蟲子&#xff1a; 你買了一箱…

SQL SERVER 打開腳本報“未能完成操作,存儲空間不足”

使用用SQLCMD命令行。 1、快捷鍵&#xff1a;winR 2、輸入cmd?&#xff0c;確定 3、輸入命令&#xff1a;sqlcmd -S <數據庫服務器名稱> -i C:\<腳本文件路徑>.sql 例&#xff1a;sqlcmd -S lgsp_PC -i D:\test.sql P.S.1:最好在你的腳本中使用:use 數據庫名(你要…

ES5-12 【utils】繼承深入、call、apply、圣杯模式、模塊化

繼承深入 這兩種方式繼承不夠合理&#xff08;為什么&#xff09; 將實例作為子類的原型 在子類的構造函數內部借用父類的構造函數 將父類的原型作為子類的原型&#xff08;會修改父類的原型&#xff09; css圣杯布局&#xff08;左右寬度固定、中間自適應&#xff09…

vue實現星級評價效果

希望對你們有用&#xff0c;已經自己試過可以的才發布出來的 效果如下&#xff1a; html&#xff1a; <template> <div class"evaStar"> <ul class"star"> <li v-for"(itemClass,index) in itemClasses" :class"itemC…

算法 --- 二叉樹查找樹的先序(中序、后序)遍歷的js實現

結點: function Node(data, left, right) {this.data data;this.left left;this.right right;this.show show; }顯示樹的數據: function show(){return this.data; }二叉查找樹: // Binary Search Tree function BST(){this.root null;this.insert insert; }添加結點到…

第三周學習

一直在練車&#xff0c;沒有學習轉載于:https://www.cnblogs.com/wj1998/p/9668534.html

IDEA的十大快捷鍵

Intellij IDEA中有很多快捷鍵讓人愛不釋手&#xff0c;stackoverflow上也有一些有趣的討論。每個人都有自己的最愛&#xff0c;想排出個理想的榜單還真是困難。以前也整理過Intellij的快捷鍵&#xff0c;這次就按照我日常開發時的使用頻率&#xff0c;簡單分類列一下我最喜歡的…

ES5-13 對象屬性遍歷、this、callee、caller

鏈式調用 在每個函數內部return this 訪問對象屬性 點語法[]中括號內是字符串或是變量 數組是特殊的對象 對象屬性遍歷 for in(遍歷對象或數組) - 不必再用Object.keys那么麻煩了 for(var key in obj){console.log(obj[key])// obj.key返回undefined// 因為js引擎會轉換為…

算法 --- 順序查找、二分查找的js實現

順序查找: function seqSearch(arr, data) {for(let i 0; i< arr.length;i) {if(data arr[i]) {return i;}}return -1 } var arr[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]; console.log(seqSearch(arr, 15))二分查找: function binSearch(arr, data) {let low 0;let…

字符串連接(貪心)

輸入n個字符串s[i]&#xff0c;你要把他們按某個順序連接起來&#xff0c;使得字典序最小。 (1 < n < 100) (每個字符串長度 < 100) (字符串只包含小寫字母) Input 第一行一個整數n。 接下來每行一個字符串s[i]。 Output 一行一個字符串表示把輸入的n個字符串按某個順…

hibernate課程 初探單表映射3-1 hibernate單表操作簡介

本章簡介&#xff1a; 1    單一主鍵 2    基本類型 3    對象類型 4    組件屬性 5    單表操作CRUD實例轉載于:https://www.cnblogs.com/1446358788-qq/p/8232078.html

vue --- cdn導入,一些基本操作

使用cdn導入vue.并使用vue做一些簡單的操作. cdn導入vue: <script src"https://cdn.jsdelivr.net/vue/2.1.3/vue.js"></script>vue-router的CDN導入: <script src"https://unpkg.com/vue-router2.5.3/dist/vue-router.js"></scrip…

SpringBoot 2.0 pom.xml 配置(熱啟動)

<?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://m…

ES5-14 【utils】三目運算符、對象克隆、淺拷貝、深拷貝

淺拷貝 for-in&#xff08;遍歷一個實例對象&#xff0c;原型上的屬性也會打印&#xff09; Object.prototype.num 1 function shallowClone(origin, target) {for (var key in origin) {target[key] origin[key]} } var p1 {name: 人類,daughter: {first: Jessica,} } va…

java代理的原理及應用

什么是代理模式&#xff1f; 定義 為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下&#xff0c;一個對象不適合或者不能直接引用另一個對象&#xff0c;而代理對象可以在客戶端和目標對象之間起到中介的作用。 ——百度百科 代理模式的角色 抽象角色&#xff1a;代…

vue --- 過濾器、計算、方法、觀察屬性

過濾器屬性:filters: <div id "app">{{num}}<br>{{num | toInt}}<br>{{num | toFloor}}<br>{{num | toCeil}}<br> </div> <script>let vm new Vue({el: #app,data:{num:3.45,},// 過濾器filters:{toInt(value){return …

《你不知道的JavaScript(上卷)》讀書筆記

第一次嘗試用思維導圖記筆記&#xff0c;感覺還不錯~~~不過還是改不了我讀書筆記寫成抄書筆記的毛病 。 因為開始學JS的時候&#xff0c;一般瀏覽器就已經支持ES6了&#xff0c;所以比較喜歡使用ES6語法&#xff0c;let&#xff0c;>等&#xff0c;文中代碼不是抄書的&#…

ES5-15 數組基礎、數組方法、數組排序

創建數組 字面量 var arr []構造函數 var arr new Array()不使用new var arr Array() 所有數組都繼承于Array.prototype&#xff0c;能使用其中的數組方法 數組是另一種形式的對象&#xff0c;訪問機制相同數組的empty項打印出來是undefined&#xff0c;empty不是值只是一個…

Centos 7 配置 NFS

安裝NFS包 yum install nfs-utils.x86_64 啟動NFS服務需要首先啟動rpcbind服務&#xff0c;這個rpcbind包已經在上面安裝好了 先配置 /etc/exports 文件 vi /etc/exports /etc/exports文件內容格式&#xff1a; <輸出目錄> [客戶端1 選項&#xff08;訪問權限,用戶映射,其…