2015-10-10 40 views
0

在ES5您可以通過一個原型設置到現有的功能,做到這一點,但你將如何去這跟ES6類ES6 JavaScript類 - 定義類的方法,以現有的功能

//// ES5 
function existingFn = function() { 
    // does something 
}; 

function MyClass() { 
    // constructor stuff 
}; 

MyClass.prototype.newFn = function() { 
    // … 
}; 

MyClass.prototype.existingFn = existingFn; 

//// ES6 
class MyClass { 
    constructor() {} 

    newFn() { 
     // … 
    } 

    // ??????? 
    // existingFn = existingFn 
    // ??????? 
} 
+0

ES6的課程只是_syntacular sugar_,沒有什麼「新」正在進行。 ES5方法仍然有效。 –

+0

@PaulS。 [_Syntactic_ Sugar](https://en.wikipedia.org/wiki/Syntactic_sugar);) – sdgluck

回答

1

ECMA腳本6級語法是通過普通的原型系統中的語法糖:定義性質的

class A { 

} 

// This is still possible! 
A.prototype.doStuff = function() { 

}; 

var existingFn = function() {}; 

A.prototype.existingFn = existingFn; 

var instance = new A(); 
instance.existingFn(); 
+2

記住未來,它稍微複雜一些:Object.defineProperty(A.prototype,'existingFn',{可配置: true,writable:true,enumerable:false,value:existingFn});'。如果有一個具有此方法的父類,則此示例_could_將失敗,並且此類重寫它,並且父屬性是getter/setter或non-writable。 – loganfsmyth

+0

@loganfsmyth我試圖爲OP的簡單場景提供解決方案。 –

0

「ES6方式」是使用構造

class MyClass { 
    constructor() { 
    this.existingFn = existingFn; 
    } 
} 
+0

真的.........? –

+0

@MatíasFidemraizer那麼,這是我找到的唯一方法(不使用原型)。我個人更喜歡使用好的'ol原型。 http://stackoverflow.com/questions/22528967/es6-class-variable-alternatives –