首頁 >web前端 >js教程 >JS高階相關知識

JS高階相關知識

一个新手
一个新手原創
2017-10-19 09:16:361425瀏覽

繼承:目前物件沒有的屬性和方法,別人有,拿來給自己用,就是繼承

1 混入式繼承


var I={ };    
var obj = {
                name: 'jack',
                age:18,
                sayGoodbye : function () {
                                        console.log("goodbye") ;
                }
    }// 混入式继承, a中 将继承obj的所有属性
    for (var k in obj ) {
        a[k] = obj [k] ;
    }

2.原型繼承

  1. 利用原型中的成員可以被其相關物件共享此特性,可以實現繼承

  2. 實作步驟

    a)  為原型物件新增成員(透過物件的動態特性),不是嚴格意義上的繼承,,,,實例物件繼承了原型


  1. ## b) 
      直接取代原型物件
    1. #建構子.prototypr = 新物件

實例物件繼承了原型(新物件)

如果物件原本有屬性和方法,使用替換的方法會覆寫原有的屬性和方法

  1.     c) 
      利用混入的方式為原型物件新增成員




混入,遍歷一個物件的屬性與方法,賦值給另一個物件for...in...



3 .經典繼承


 js

  var 物件1 = Object.creat(物件2) ;

      這時候,建立出來的物件1 繼承自物件2
  1. Object.creat方法有相容性問題

  2.   解決:      
  3.     1.偵測瀏覽器是否支援Object.create方法,如果不支援,直接手動為新增化方法方法加入新增功能方法。 2.自訂函數,在函數內部判斷瀏覽器是否支援Object.create方法,如果不支持,則手動建立物件返回,否則直接呼叫

  4.  
  5. function creat(obj) {    
        if (object.creat){            
        return Object.creat(obj);
           }else{
                function F(){
                    }
                F.prototype = obj;            
                return new F();
                }
        }
  6. 如何更安全的拓展內建物件

function MyArray() {    
this.name = "我是数组"     
}
var arr = new Array();
MyArray.prototype =arr ; // 继承后,我的数组中 就有了原生数组对象的所有属性和方法
var  myArr = new MyArray() ;   // myArr 这个对象就继承自arr

原型鏈

什麼是原型鏈每個建構函式都有原型對象,每個物件都有建構函數,每個建構函數的原型物件都是對象,也就有建構函數
然後就形成一個鍊式的結構,我們稱之為原型鏈

 原型繼承是什麼?
透過修改原型鏈的結構,實現繼承的方式就是原型繼承

屬性搜尋原則

當存取一個物件的成員的時候,先在自身找有沒有,如果有,直接使用

如果沒有找到,則去當前物件的原型物件中去找,如果有,直接使用

#如果沒有找到,則去原型物件的原型物件中去找,如果有,直接使用

#指導Object,如果還是沒有,則回傳null

#透過修改原型鏈繼承結構實現的繼承就叫原型繼承

function Person() { } ;var p = new Person() ;

p對象包含的物件有: Person.prototype中的成員和自身擁有的成員

Person.prototype中的成員有: Object.prototype的成員和自身的成員

   Object.prototype的成員:


    constructor : 指向和該原型相關的建構子

    hasOwnProperty 方法: 判斷獨享本身是否擁有某個屬性##able#     properj  四  屬性。物件本身,2.判斷屬性是否可以遍歷    toString toLocalString: 將物件轉換成字串 toLocalString轉換成字串的時候應用的本地的設定模式

    valueOf  運算的時候,先呼叫valueOf方法取得物件的值,若該值無法參與運算,將會調

            用原型的物件方法

#      用原型物件:1.  Function
 3種建立函數的方式:

  直接宣告
  函數表達式

#  new Function()


#可以用Function 來建立函數:

 語法:


###
 函数名 =  Function ( ) ;  函数名 =  Function();  函数名 =  Function(,,,...
var distinct = new Function(`
              var arr = [];
              for (var i = 0; i < arguments.length; i++) {
                    if(arr.indexOf(arguments[i])==-1){
                        arr.push(arguments[i]);
                    }
              }
              return arr;
        `);
//可以使用Ese下边的符号 来连接字符串进行换行操作 但是存在兼容性问题
console.log(distinct(1, 2, 34, 34, 5, 5));
#########eval### ###可以將字串轉換成js程式碼並執行######  注意:當使用eval解析JSON格式字串的時候,要注意,會將{}解析為代碼段#########1.可以在JSON格式字符串前面拼接"var 變數名="###    eval("var 變數名稱=" + JSON格式的字串);#########2.可以在JSON格式字串前後拼接()# #####eval("("+JSON格式的字串+")")######### 靜態成員與實例成員###  靜態成員###      透過建構子去存取的屬性和方法就是靜態成員######  實例成員###      透過物件(實例)去存取的屬性和方法就是實例成員###

以上是JS高階相關知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn