Eug*_*y89 3 javascript prototype
我正在学习Javascript并且有几个关于Javascript和OOP的问题.我已经注意到各种教程中"类"中函数的不同声明.首先是内部构造函数:
Class = function () {
this.doSomething = function() {....};
}
Run Code Online (Sandbox Code Playgroud)
另一个是:
Class = function () {}
Class.prototype.doSomething = function() {....};
Run Code Online (Sandbox Code Playgroud)
在哪种情况下应该使用第一种结构,在哪种情况下应该使用第二种结构?
另一个问题是:我是否正确理解protectedjs中没有属性或方法?用什么代替?
先感谢您!
Den*_*ret 10
在构造函数中定义函数时this.myFunction=...,它特定于您的实例.这意味着必须为所有实例构建并保存它,这可能很重.它也不能被继承.
这样做的唯一有效理由是:
通常,您真正需要的是在原型上定义的函数.
从MDN对象:
JavaScript中的所有对象都来自Object; 所有对象都从Object.prototype继承方法和属性,尽管它们可能被覆盖.例如,其他构造函数的原型覆盖构造函数属性并提供自己的toString方法.对原型对象的更改将传播到所有对象,除非沿着原型链进一步覆盖受这些更改影响的属性和方法.
关于您的其他问题:以下代码构建了一个不可直接访问的函数:
Class = function () {
var imprivate = function(){...};
this.doSomething = function() { uses imprivate};
}
Run Code Online (Sandbox Code Playgroud)
缺点是每个实例都有不同的函数实例Class.这通常是针对模块(从中只有一个实例)完成的.就个人而言,我更喜欢完全按照ThiefMaster的建议做评论:我的私人函数前缀为_:
// private method
XBasedGrapher.prototype._ensureInit = function() {
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3681 次 |
| 最近记录: |