gpt4 book ai didi

javascript - 关闭原型(prototype)?

转载 作者:行者123 更新时间:2023-11-30 05:43:28 26 4
gpt4 key购买 nike

如果您需要创建很多方法,那么使用原型(prototype)方法会有好处,那么当您创建一个对象时,其方法关闭 “this” 时,您是否会获得相同的效果和好处?在构造函数中?

请看下面的代码:

(function(){


var Planet = function(){

var self = this;


var API = {
publicInterfaceMethodA:function(){
self.privateProtoMethodA();
},

publicInterfaceMethodB:function(){}
};

return API;

};



Planet.prototype = {

privateProtoMethod:function(){ },
privateProtoMethodA:function(){ },
privateProtoMethodB:function(){ },
privateProtoMethodC:function(){ },
privateProtoMethodD:function(){ },
privateProtoMethodE:function(){ }

};


var mars = new Planet();




}());

假设我在原型(prototype)上有 100 个“私有(private)” 方法,对于我创建的每个实例,我只想公开这几个公共(public) api 方法,但我想保留使用原型(prototype)的好处对于内部方法,这样我就不会为每个创建的实例“复制”100 个方法到“this”

据我所知,这不是人们通常这样做的方式,我是不是遗漏了一些东西,或者如果不在构造函数中返回 “this” 并公开整个原型(prototype),您是否可以获得同样的好处?

谢谢

最佳答案

当我开始认真地在 JS 中开发时,我也经常使用 var self = this;,因为我从各种 jQuery 教程中习惯了它,我也尝试了你的方法和其他人来模拟私有(private)方法。

就我个人而言,我不再喜欢两者。虽然 mars 确实不是 Planet 的实例,但在我看来,这不是一个真正的问题,因为我通常会测试 api 功能,而不是经常测试如果对象是某个构造函数的实例。

致私有(private)方法/成员:当您的项目增长并变得更大时,您可能想要开始进行单元测试。如果你例如有 100 个私有(private)方法和只有 10 个 个公共(public)方法,创建良好的单元测试会变得非常有问题。对于单元测试,您希望测试尽可能少的依赖项。这就是为什么我改变了主意,更愿意使用 jsdoc 创建清晰的 api 文档,使用注释来标记方法/成员(如果它们是私有(private)的)而不是完全隐藏它们。

有时它不仅可以根据情况替换公共(public)方法,还可以替换私有(private)方法。

肯定有适合您的方法的有效情况,但如果您只是使用它来保护函数不被滥用,您可能应该考虑一下。

对于 var self = this;:只要 someFunction.bind(element) 不会造成性能问题,我更喜欢使用 bind(旧版浏览器有一个 polyfill)。这样你就可以避免深度嵌套,例如回调,您无需记住您需要使用 self,其中 expected 关键字将是 this

关于javascript - 关闭原型(prototype)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19430949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com