在JAVASCRIPT模块模式中定义私有字段成员和继承
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在JAVASCRIPT模块模式中定义私有字段成员和继承,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2046字,纯文字阅读大概需要3分钟。
内容图文
![在JAVASCRIPT模块模式中定义私有字段成员和继承](/upload/InfoBanner/zyjiaocheng/675/7a43f367a066464b838779f260746dd7.jpg)
我可以使用以下代码在模块模式中定义私有成员字段
var myClass = function(){
var private_field1,private_field_2;
var private_func1 = function(){
//.......
}
//.........
var myObj = {
global_field1:2,
global_field2:"something",
global_func: function(){//......}
}
return myObj;
};
var obj = myClass();
这个方法很好用,但是这个问题的问题是,每当我创建一个新对象时,所有函数的副本都会被创建并加载到内存中(不像Java,同一类的所有对象共享相同的函数内存)
我尝试使用下面的其他方法:
var myClass = (function(){
var private_field1,private_field_2;//private static fields
var private_func1 = function(){
//.......
}
//.........
var Constr = function(){
//do something
}
Constr.prototype = {
//................
global_func: function(){//......}
}
return Constr;
}());
var obj1 = new myClass();
var obj2 = new myClass();
但是此方法的问题在于,显然obj1,obj2共享相同的私有字段副本(因此它们实际上是静态的).那么,有没有一种方法可以在使用相同功能的对象副本的同时在模块模式中定义私有字段?
对于上述第一个方法的继承,我首先需要在子类中创建一个对象,然后返回该对象.
var ChildClass = function(){
var childobj = myClass();
//override or add functions to childobj
return childobj ;
}
但这实际上只是将baseClass的对象包装在childClass中,是否有其他方法可以实现相同的功能(用于1st或2nd方法),以便可以像使用受保护的,私有的等方法的真正Java继承一样工作?
解决方法:
不能.JavaScript的私有性只能通过范围界定(并从中导出:闭包)来实现.
需要访问私有变量(和函数)的那些函数(称为特权方法)需要在构造函数中定义.那些不(仅与公共属性或其他方法交互)的方法应在原型对象上定义,因此最终您将获得混合方法.可能与您刚发现的静态值组合.
顺便说一句,不是功能[code]本身被多次复制和存储.只需要存储不同的作用域对象(词法环境).
继承通常不是通过创建父对象并对其进行扩展来完成,而是通过创建子实例并将其像父对象一样进行扩展来完成.这可以通过新创建的子代上的父代构造函数applying完成:
function ChildClass() {
ParentClass.call(this, /* … arguments */);
// usual body, using "this"
}
而且,Child的原型直接从Parent的原型对象继承.可以通过Object.create完成(旧版浏览器需要填充):
ChildClass.prototype = Object.create(ParentClass.prototype, {
constructor: {value:ChildClass}
});
内容总结
以上是互联网集市为您收集整理的在JAVASCRIPT模块模式中定义私有字段成员和继承全部内容,希望文章能够帮你解决在JAVASCRIPT模块模式中定义私有字段成员和继承所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。