js自定义类和对象及继承
1.工厂方式
<script type="text/javascript">
function createObject(name){
var p = new Object();
p.name=name;
p.say = function(){alert(p.name+'ff');}
return p;
}
var p1 = createObject("p1");
var p2 = createObject("p2");
alert(p1.name+" "+p2.name);
p1.say();p2.say();
alert(p1.say==p2.say); //false
</script>
问题:每创建一个对象,对象的方法是新对象,浪费资源
2、构造函数方式
<script type="text/javascript">
function Person(name){
this.name = name;
this.say = function(){
alert("I am "+this.name);
}
}
var p1 = new Person("wang");
var p2 = new Person("li");
p1.say();
p2.say();
alert(p1.say==p2.say); //false
</script>
问题:
创建对象时比工厂方法更易于理解。
和工厂方法一样,每个对象都有自己的方法,浪费资源。
3、原型方式
function Person(){}
Person.prototype.name = "";
Person.prototype.say = function(){
alert("I am "+this.name);
}
var p1 = new Person();
var p2 = new Person();
alert(p1.say == p2.say);//true
问题:无法在构造方法中传递参数,所有对象共享属性。
优点:对象共方法,节约资源。
4、构造方法+原型方式
function Person(name){
this.name = name;
}
Person.prototype.say = function(){
alert("I am "+this.name);
}
var p1 = new Person("wang");
var p2 = new Person("li");
p1.say();
p2.say();
alert(p1.say==p2.say); //true
优点:解决了前面提到的问题。
问题:封装不够完美。
5、动态原形方式
function Person(name){
this.name = name;
if(Person.prototype.say == undefined){
Person.prototype.say = function(){
alert("I am "+this.name);
}
}
}
var p1 = new Person("wang");
var p2 = new Person("li");
p1.say();
p2.say();
alert(p1.say==p2.say); //true
结论:一种完美的解决方案。
6、对象的创建 - JSON
var person = {};
var girl = {
name:“miss wang”,
age:20,
show = function(){
alert("my name is " + this.name);
}
}
继承的实现方式
1、 对象冒充
function People(name){
this.name = name;
this.say = function(){
alert("I am "+this.name);
}
}
function WhitePeople(name){
this.inherit = People;
this.inherit(name);
delete this.inherit;
this.color = function(){
alert("I am white people.");
}
}
var p = new WhitePeople("wang");
p.say();
p.color();
alert(p instanceof People); //false
结论:支持多重继承,但后面的类可以覆盖前面类的属性和方法。继承后的对象类型和父类对象不匹配
2、利用call()和apply()冒充
function People(name,age){
this.name = name;
this.age = age;
this.say = function(){
alert("I am "+this.name+" "+this.age);
}
}
function WhitePeople(name,age){
//People.call(this,name,age);//call方式以多个参数进行传值
People.apply(this,[name,age]);//apply方式以数组方式进行传值
this.color = function(){
alert("I am white people.");
}
}
var p = new WhitePeople("wang",34);
p.say();
p.color();
alert(p instanceof People);
3、原型链继承
//父类
function People(name){
this.name = name;
}
People.prototype.say = function(){
alert("I am "+this.name);
}
//子类
function ChinaPeople(name,area){
People.call(this,name);
this.area = area;
}
ChinaPeople.prototype = new People();
ChinaPeople.prototype.from = function(){
alert("I'am from "+this.area);
}
var p = new ChinaPeople("wang","si chuan");
p.say();
p.from();
alert(p instanceof People); //true
结论:不支持多重继承,继承后的对象类型和父类对象匹配
分享到:
- 2009-08-12 16:51
- 浏览 1354
- 评论(1)
- 论坛回复 / 浏览 (1 / 4216)
- 查看更多
相关推荐
"自定义JS类框架"指的是开发者根据自身需求,利用JavaScript语言特性(如原型链、闭包、模块化等)和jQuery库,构建的一种自定义的框架。这个框架可能是为了简化DOM操作、提供更高级别的API、优化性能或者实现特定的...
JavaScript自定义对象 在JavaScript中,自定义对象是一种非常重要的概念,它允许开发者创建自己的对象类型,从而满足不同的需求。JavaScript自定义对象可以通过多种方式创建,包括工厂方法、构造函数、原型方式和...
它通常会继承Esri的`InfoWindowBase`类,这个基类提供了基础的Infowindow功能,包括打开、关闭、定位等。通过继承,我们可以扩展其功能,添加自定义的交互和样式。例如,你可以重写`setContent`方法来自定义信息窗体...
根据给定的文件信息,我们将深入探讨JavaScript中的自定义对象创建与使用,这在现代Web开发中是一项核心技能。下面将详细解析如何在JavaScript中创建和操作自定义对象,包括对象字面量、构造函数、原型链以及静态...
目的:该示例非常详细注释说明Ext的面向对象的编程方式,使用继承,然后重写父类的方法,以及注册自定义事件说明Ext框架是事件驱动的框架编程。 阅读对象:本中心学习Ext面向对象编程的人员 阅读条件:掌握OO的思路...
首先,要自定义一个GroupBox,我们需要继承.NET Framework提供的System.Windows.Forms.GroupBox类。通过继承,我们可以扩展其默认功能并添加我们自己的特性。以下是一个简单的自定义GroupBox类的框架: ```csharp ...
JavaScript是Web开发中不可或缺的一...理解并熟练掌握这种继承方式,对于深入理解JavaScript的OOP特性以及编写高效的代码至关重要。通过深入学习和实践,开发者可以更好地利用JavaScript的灵活性来构建复杂的Web应用。
1. 创建自定义指令类:你需要创建一个继承自`freemarker.template.TemplateDirectiveModel`的Java类。这个类将定义你的自定义标签的行为,包括如何处理输入参数,如何处理模板模型数据,以及如何生成输出。 2. 注册...
- 创建`Module.java`类,继承`ApiModule`,实现需要的方法。 - 在`AndroidManifest.xml`中添加必要的权限和Activity(如果需要)。 - 编写业务逻辑,处理JavaScript的调用请求。 五、模块测试与调试 APICloud提供...
在.NET中,可以创建自定义验证器类,继承自`System.Web.UI.WebControls.BaseValidator`,重写`EvaluateIsValid`方法实现业务逻辑。这样,即使客户端验证被绕过,服务器仍能确保数据的正确性。 5. **整合前后端**:...
例如,你可以创建一个名为`CustomPageController`的类,并继承`Dcat\Admin\Controllers administrable`基类。确保在控制器中注册你需要的方法,如`index()`用于展示页面,`store()`用于数据存储等。 接下来,我们...
在JavaScript中,继承是一种核心机制,它允许创建新的对象类型并重用已存在的代码。`Base`类在JavaScript中被广泛使用,作为一个优秀的继承封装,它简化了对象间的继承关系。这里我们将深入解析`Base`类的部分源码,...
ES6 类(Class)的继承(extends)和自定义存(setter)取值(getter)详解,博客地址: http://blog.csdn.net/pcaxb/article/details/53784309
- `js`:这个目录可能包含了JavaScript文件,与自定义标签的实现没有直接关系,但可能用于前端交互或数据验证。 - `META-INF`:这个目录通常用于存储元数据,如MANIFEST.MF文件。在自定义标签的上下文中,如果这个...
要创建自定义图层,我们需要继承ArcGIS Layer类,并重写其关键方法,如`draw`或`update`。这些方法将在地图渲染时被调用,让我们有机会添加自己的渲染逻辑。对于水波纹扩散效果,我们需要实现一个算法来模拟水波的...
要实现自定义撤销/重做命令,首先需要创建一个新的命令类,该类继承自 SpreadJS 提供的 `gc.spread.sheets.command.Command` 类。在命令类中,你需要重写 `execute` 和 `undo` 方法,分别表示执行命令和撤销命令的...
这需要在控件的接口中定义适当的方法,并在JavaScript端使用`new ActiveXObject`来创建和操作自定义类型。 在开发过程中,使用Visual Studio等IDE可以简化许多步骤,例如生成接口的IDL文件,编译为TLB(Type ...
JavaScript中的继承是通过原型链来实现的,新手可能会对如何创建自定义的继承机制感到困惑。可以创建一个基类,比如`BaseClass`,然后通过原型链让其他类继承它。在ES6中,可以使用`class`关键字和`extends`关键字...
3. 创建自定义覆盖物:创建一个新的覆盖物类,继承自`BMap.Overlay`。在这个类中,我们需要覆盖`draw`方法来绘制覆盖物,以及可能的`onClick`等事件处理方法。 4. 定义标注样式:在覆盖物类中,可以设置标注的外观...
要创建自定义小部件,你需要继承`StatelessWidget`或`StatefulWidget`类,并实现`build`方法,返回一个`Widget`。`StatelessWidget`适用于不需状态变化的组件,而`StatefulWidget`用于需要管理状态的组件。 对于更...