2015-10-10 33 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 –