2017-09-22 67 views
1

我想做到以下幾點:如何在JavaScript(ES6)中繼承Selection對象?

class MySelection extends Selection { 
    constructor() { 
     super() 
    } 
    someNewMethod1() { 

    } 
    someNewMethod2() { 

    } 
} 

不過,我目前只限於做const instance = document.getSelection(),然後手動添加靜態方法。這樣做沒有問題,但我只是好奇是否有一種方法可以使用Selection對象的類語法 - 畢竟它是大寫的,所以您可以使用new Selection()或子類化來實例化它它。

+2

您不會創建一個帶有構造函數的Selection對象,因此您無法輕易通過這種方式對其進行子類化。相反,瀏覽器提供了一個工廠函數'window.getSelection()',它爲你創建一個對象。所以,你沒有辦法真正使它創建你想要的子類對象。 – jfriend00

+0

原型怎麼樣? Selection.prototype.someNewMethod1 = function(){}完全符合你的想法。 – bigless

+0

它向Selection對象的原型添加了一個函數,但調用'window.getSelection()'時該函數不可用。我最終只是做了一些事情:'const mySel = window.getSelection()',然後添加方法:'mySel.someNewMethod1 = function(){}'。由於'window.getSelection()'每次都會檢索同一個實例,因此如果'Selection'是一個普通的構造函數,那麼該方法的持續方式與您的示例所做的相同。 –

回答

0

我實際上是從「lodash」

class Model { 
    constructor(props) { 
    this.initialize(props) 
    } 

    initialize(props) { 
    this.id = props.id && Number(props.id) || null 
    this.createdAt = props.createdAt && moment(props.createdAt) || null 
    this.updatedAt = props.updatedAt && moment(props.updatedAt) || null 
    this.deletedAt = props.deletedAt && moment(props.deletedAt) || null 
    } 

    toJson() { 
    const props = Object.assign({}, this) 

    _.forOwn(props, (value, key) => { 
     if (value instanceof moment) { 
     props[key] = value.format('YYYY-MM-DD HH:mm:ss') 
     } 
    }) 
    return props 
    } 
} 

import moment from 'moment' 
import Model from './Model' 
import User from './User' 

class Article extends Model { 
    constructor(props) { 
    super(props) 

    this.initialize(props) 
    } 

    initialize(props) { 
    super.initialize(props) 

    this.slug = props.slug | '' 
    this.title = props.title || '' 
    this.description = props.description || '' 
    this.content = props.content || '' 
    this.published = props.published || false 
    this.publishedAt = props.publishedAt ? moment(props.publishedAt) : null 

    // relate user model 
    this.user = props.user ? new User(props.user) : null 
    } 
} 

export default Article 

實現這一點,它工作得很好,我在這裏是我的代碼示例從「時刻」 進口

進口一刻_我可以很容易地啓動第二條或模型類和使用實例或靜態函數,如

const Article = new Article({ // }); 

Article.toJson();