1. 程式人生 > >ES6-物件的擴充套件-super關鍵字

ES6-物件的擴充套件-super關鍵字

this關鍵字總是指向函式躲在的當前物件,ES6 又新增了另一個類似的關鍵字 super,指向當前物件的原型物件。

const proto = {
  foo: 'hello'
};

const obj = {
  find() {
    return super.foo;
  }
};

Object.setPrototypeOf(obj, proto);
obj.find() // "hello"
上面程式碼中,物件 obj 的 find 方法之中,通 super.foo 引用了原型物件 proto 的 foo 屬性。

注意,super 關鍵字表示原型物件時,只能用在物件的方法之中,用在其他地方都會報錯。

// 報錯
const obj = {
  foo: super.foo
}

// 報錯
const obj = {
  foo: () => super.foo
}

// 報錯
const obj = {
  foo: function () {
    return super.foo
  }
}
上面三種 super 的用法都會報錯,因為 對於 JavaScript 引擎來說,這裡的 super 都沒有用在物件的方法之中。第一種寫法是 super 用在屬性裡面,第二種和第三種寫法是 super 用在一個函式裡面,然後賦值給 foo 屬性。目前,只有物件方法的簡寫法可以讓 JavaScript 引擎確認,定義的是物件的方法。

JavaScript 引擎內部,super.foo 等同於 Object.getPrototypeOf(this).foo (屬性)或 Object.getPrototypeOf(this).foo.call(this) 方法

const proto = {
  x: 'hello',
  foo() {
    console.log(this.x);
  },
};

const obj = {
  x: 'world',
  foo() {
    super.foo();
  }
}

Object.setPrototypeOf(obj, proto);

obj.foo() // "world"
上面程式碼中,super.foo 指向原型物件 proto 的 foo 方法,但是繫結的 this 卻還是當前物件 obj,因此輸出的就是 world。

相關推薦

ES6-物件擴充套件-super關鍵字

this關鍵字總是指向函式躲在的當前物件,ES6 又新增了另一個類似的關鍵字 super,指向當前物件的原型物件。 const proto = { foo: 'hello' }; const obj = { find() { return super.fo

es6 物件擴充套件運算子 res運算子

當我們對引數的個數不確定時,可以用物件拓展運算子 funtion lala(...arg){   console.log(arg[0]); 1    console.log(arg[1]); 2   console.log(arg[2]); 3   console.log(arg[3]);

JAVA初級(八)物件super關鍵字

這次介紹super關鍵字,super表示父類的引用的。一個類如果繼承了另外一個類,那麼這個類的物件的引用是this,繼承的那個類的引用就是super super如何來使用? super如何來使用? super如何來用呢?在程式碼表現上和this一樣

ES6中的super關鍵字

在JavaScript中,this關鍵字總是指向函式所在的當前物件,ES6中增加了一個與this對應的super關鍵字,指向的是當前物件(this指向的物件)的原型物件。 const demo1 = { prop1 : '屬性1' }; const demo2

ES6物件擴充套件

今天來總結一下es6的物件擴充套件,最近一直在看es6, 感覺es6真的很好用,不過也看到過網上一些反面語言,可能因人而異,es6 的發展前景讓我們拭目以待。 一、物件屬性和方法 1.簡寫 // 屬性簡寫 var a = "first"; var

web前端之es6物件擴充套件

1.屬性的簡潔表示法 2.屬性名錶達式 表示式作為物件的屬性名 3.方法的 name 屬性 例如:函式的name 屬性,返回函式名。 4.Object.is() ES 比較兩個值是否相等,只有兩個運算子,相等運算子,相等運算子(==) 和嚴格相等運算子(

Java面向物件----繼承概念,super關鍵字

繼承概念:   繼承需要符合的關係  is-a  , 父類通用更抽象,子類更特殊更具體 類之間的關係 繼承體現 組合體現 實現介面體現 繼承的意義    程式碼重用   體現不同抽象層次 extends關鍵字 Super關鍵字

es6 -- 物件擴充套件(常用)

目錄   1.屬性的簡寫 2.Object API 3.擴充套件運算子 1.屬性的簡寫 如果物件中只寫屬性名,不寫屬性值。這時,屬性值等於屬性名所代表的變數。  //es5寫法 var name='cc'; var obj={ name

es6 super關鍵字

http://es6.ruanyifeng.com/#docs/class-extends super關鍵字,既可以當作函式使用,也可以當作物件使用。這倆種的使用是不一樣的 第一種:函式使用     代表父類的建構函式。ES6規定,子類的建構函式,必須執行一次super()函式 &

ES6 物件擴充套件

1、Object.assign() 方法用於將所有可列舉屬性的值從一個或多個源物件複製到目標物件。它將返回目標物件。 注意該方法實行的是淺拷貝,而不是深拷貝。 const object1 = { a: 1, b: 2, c: 3 }; const object2 = Ob

es6——內建物件擴充套件 陣列擴充套件(Array.form和Array.of) 物件擴充套件

1.內建物件擴充套件 顯示一行 不方便觀看 { let html='<body>' + '<p>good l

es6 物件擴充套件物件的解構和深拷貝

物件的擴充套件 屬性的簡潔表示法 ES6 允許直接寫入變數和函式,作為物件的屬性和方法。這樣的書寫更加簡潔。 const foo = 'bar'; const baz = {foo}; baz // {foo: "bar"} // 等同於 con

[ ES6 ](二)函式陣列物件擴充套件

函式的擴充套件 函式引數的預設值 ES5: function log(x, y) { y = y || 'World'; console.log(x, y); } log('Hello') // Hello World log('Hello', 'C

ES6物件的相關擴充套件

屬性簡潔表示 ES6 允許直接寫入變數和函式,作為物件的屬性和方法。 在物件之中,直接寫變數。這時,屬性名為變數名, 屬性值為變數的值。 用於函式返回值,將會非常方便。 屬性的賦值器(setter)和取值器(getter)也是採用改寫法 let birth = '200

ES6擴充套件物件的功能性

目錄 一、物件類別 二、物件字面量的語法擴充套件 2.1、屬性初始值的簡寫 2.2、物件方法的簡寫語法 2.3、可計算屬性名 三、新增方法 3.1、Object.is()方法 3.2、Object.assign()方法 四、重複的物件字面量屬性 五、自有屬性列

Java基礎【面向物件 構造方法 this super關鍵字

第12天面向物件 今日內容介紹  構造方法  this  super 第1章 構造方法 我們對封裝已經有了基本的瞭解,接下來我們來看一個新的問題,依然以Person為例,由於Person中的屬性都被private了,外界無法直接訪問屬性,必須對外提供相應的

面向物件三大特徵,super關鍵字,以及父類引用指向子類物件。訪問許可權的大小。

一.封裝,反射的時候在詳細補充。 二.繼承 補充:子類的訪問許可權一定要大於等於父類。 訪問許可權的優先順序順序:public(在哪裡都可以訪問)>protected(保護的意思,子類可以訪問,但是子類的許可權要大於父類的許可權,這是首要條件,否者子類依舊訪問不到)

第二十四、Java面向物件三大特性之繼承與super關鍵字

面向物件的三大特徵:1. 封裝2. 繼承3. 多型. 1、類和類之間的常見關係     1:既然繼承是描述類和類之間的關係,就需要先來了解類和類之間的常見關係 1.1  現實生活的整體與部分 舉例說明 1:現實生活     1:學生   是人      2:狗    

ES6物件擴充套件及新增方法

1.屬性的簡潔表示法 ES6允許直接寫入變數和函式,作為物件的屬性和方法。這樣的書寫更加簡潔。 const foo = 'bar'; const baz = {foo}; baz//{foo:'bar'} //等同於 const baz = {foo:foo} 上面程式碼表

ES6-物件擴充套件-屬性的可列舉性和遍歷

可列舉 物件的每一個屬性都有一個描述物件,用來控制該屬性的行為。Object.getOwnpropertyDescriptor 方法可以獲取該屬性的描述物件。 let obj = { foo: 123 }; Object.getOwnPropertyDescriptor(