JS:嵌套函数v原型
JS: nested function v prototype
我在Javascript中有一个对象,并且希望使用一个函数来处理传递给构造函数的数据,该函数稍后可以在外部调用更多数据。当然,我不想重复代码(一次在构造函数中,一次在函数中),那么我应该如何最好地设置它呢?
我可以使用嵌套函数,但我被告知这是低效的:
function MyOb(data) {
this.myData = {};
function addData(newData) {
//Add newData to myData
}
addData(data);
}
但是如果我使用一个原型,我得到一个"不能找到变量addData"错误在第3行:
function MyOb(data) {
this.myData = {};
addData(data);
}
MyOb.prototype.addData = function(newData) {
//Add newData to myData
}
所以我被迫要么使用嵌套函数或重复自己,或者有一种方法使这个工作使用原型?
变化
function MyOb(data) {
var myData;
addData(data);
}
function MyOb(data) {
this.myData = {}; // or another initialization
this.addData(data);
}
在JavaScript对象中需要显式的this
还请注意,使用var myData
使其私有:您将无法在构造函数之外定义的函数中使用该变量,包括addData
函数。这就是为什么你可能需要this.myData
代替。
使用原型,您需要创建一个新对象:
var abc = new MyOb(data);
则可以使用this
:
function MyOb(data) {
var _myData; // local variable in this scope (addData won't have access)
this.myData = {}; // public variable
this.addData(data);
}
如果您不使用new
来构建您的对象,那么this
将成为window
,并且您的代码将无法工作
您应该将嵌套函数作为对象的属性公开可用:
function MyOb(data) {
var myData;
function addData(newData) {
//Add newData to myData
}
addData(data);
this.addData = addData;
}
你当前的代码与原型遭受的问题,你试图得到函数像一个变量,而它是你的实例(由this
引用)的(继承)属性。但是,将其更改为
this.addData(data);
会在原型函数中导致错误can't find variable myData
——它是构造函数的局部变量。要使用原型,你还需要把它设为实例属性。另请参阅Javascript:我需要把这个。
相关文章:
- 使用方括号访问插件原型函数
- 使用setInterval调用原型函数时出现问题
- 无法从angularjs调用JavaScript原型函数
- AngularJS ng repeat显示原型函数未定义
- 在 Redux 状态下存储具有原型函数的对象
- Javascript 中的构造函数不会返回由原型函数传递的正确值
- JavaScript:在哪里放置原型函数
- 创建所有原型函数均可访问的局部变量
- 可以'这'在原型函数中未定义
- 使用特权Getter/Setter函数的JavaScript原型函数
- Javascript、node、Q promise、原型函数和“;这个“;
- 在Javascript中将对象原型函数绑定到对象
- 从node.js模块中向JSON添加原型函数
- 从另一个(包括其自身)触发一个原型函数
- Javascript原型继承原型函数调用
- JavaScript–从另一个原型函数调用原型的一个函数
- 访问原型函数中的私有成员
- 如何在AngularJS中将依赖关系传递给原型函数
- 这两种用 JavaScript 编写原型函数的方式有什么区别?
- 为什么不能使用lambda来定义原型函数