使函数仅对其原型可用
Making a function only available to its prototypes
以下是我的代码:
Random = function(name) {
this.name = name;
this.addSomething = function(a, b) {
return a + b;
}
}
Random.prototype.addStuff = function(a, b, c, d) {
return this.addSomething(a, b) + this.addSomething(b, d);
}
我需要this.addSomething
只在函数本身及其原型中可用,但这不起作用。
有人能给我指一个正确的方向,告诉我怎么做吗?谢谢
创建"私有"成员/方法的唯一方法如下:
Random = function(name) {
this.name = name;
function add_something(a, b) {
return a + b;
}
this.addStuff = function(a, b, c, d) {
return add_something(a, b) + add_something(b, d);
}
}
编辑:正如RobG在回答中提到的,Douglas Crockford的这篇文章将帮助您了解公共、私有和特权成员/方法如何在Javascript中工作。这是一本非常值得注意的读物。
[[Prototype]]
(忽略已弃用的proto属性)。
构造函数(它是一个函数)和由构造函数创建的对象可以具有相同方法的唯一方法是在它们的[[Prototype]]
链中共享一个对象。这只能通过扩展Object.prototype来实现,因为这是Function和Object都可以共享的唯一对象。
此外,您不能阻止对对象的公共方法的访问。你可以模仿私人成员,但这是相当弱的模仿。但是,您可以使用方法检查调用对象是否是特定"类"的实例,例如
function Foo(){}
Foo.prototype.bar = function() {
return this instanceof Foo? 'success' : 'failure';
}
var foo = new Foo();
var blah = {};
// Call bar method of an instance of Foo
alert(foo.bar()); // success
// Call bar method on some other object
alert(Foo.prototype.bar.call(blah)); // failure
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来定义原型函数