`
draglone
  • 浏览: 3030 次
  • 性别: Icon_minigender_1
  • 来自: 四川
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

js自定义类并继承

阅读更多
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

结论:不支持多重继承,继承后的对象类型和父类对象匹配
分享到:
评论
1 楼 wangying95599 2009-08-17  
在项目中,一般什么情况用到js自己定义类啊,我一直想知道

相关推荐

    自定义JS类框架

    "自定义JS类框架"指的是开发者根据自身需求,利用JavaScript语言特性(如原型链、闭包、模块化等)和jQuery库,构建的一种自定义的框架。这个框架可能是为了简化DOM操作、提供更高级别的API、优化性能或者实现特定的...

    js自定义对象

    JavaScript自定义对象 在JavaScript中,自定义对象是一种非常重要的概念,它允许开发者创建自己的对象类型,从而满足不同的需求。JavaScript自定义对象可以通过多种方式创建,包括工厂方法、构造函数、原型方式和...

    arcgis javascript自定义infowindow

    它通常会继承Esri的`InfoWindowBase`类,这个基类提供了基础的Infowindow功能,包括打开、关闭、定位等。通过继承,我们可以扩展其功能,添加自定义的交互和样式。例如,你可以重写`setContent`方法来自定义信息窗体...

    JS:自定义对象

    根据给定的文件信息,我们将深入探讨JavaScript中的自定义对象创建与使用,这在现代Web开发中是一项核心技能。下面将详细解析如何在JavaScript中创建和操作自定义对象,包括对象字面量、构造函数、原型链以及静态...

    Ext继承--Ext自定义组件的书写方式

    目的:该示例非常详细注释说明Ext的面向对象的编程方式,使用继承,然后重写父类的方法,以及注册自定义事件说明Ext框架是事件驱动的框架编程。 阅读对象:本中心学习Ext面向对象编程的人员 阅读条件:掌握OO的思路...

    C# 编写Winform 自定义控件GroupBox

    首先,要自定义一个GroupBox,我们需要继承.NET Framework提供的System.Windows.Forms.GroupBox类。通过继承,我们可以扩展其默认功能并添加我们自己的特性。以下是一个简单的自定义GroupBox类的框架: ```csharp ...

    js javascript zInherit 对象 继承

    JavaScript是Web开发中不可或缺的一...理解并熟练掌握这种继承方式,对于深入理解JavaScript的OOP特性以及编写高效的代码至关重要。通过深入学习和实践,开发者可以更好地利用JavaScript的灵活性来构建复杂的Web应用。

    freemarker 自定义freeMarker标签

    1. 创建自定义指令类:你需要创建一个继承自`freemarker.template.TemplateDirectiveModel`的Java类。这个类将定义你的自定义标签的行为,包括如何处理输入参数,如何处理模板模型数据,以及如何生成输出。 2. 注册...

    apicloud自定义模块开发源码打包截图自定义模块打包

    - 创建`Module.java`类,继承`ApiModule`,实现需要的方法。 - 在`AndroidManifest.xml`中添加必要的权限和Activity(如果需要)。 - 编写业务逻辑,处理JavaScript的调用请求。 五、模块测试与调试 APICloud提供...

    自定义验证控件 JS+.net

    在.NET中,可以创建自定义验证器类,继承自`System.Web.UI.WebControls.BaseValidator`,重写`EvaluateIsValid`方法实现业务逻辑。这样,即使客户端验证被绕过,服务器仍能确保数据的正确性。 5. **整合前后端**:...

    Dcat-admin自定义页面干货

    例如,你可以创建一个名为`CustomPageController`的类,并继承`Dcat\Admin\Controllers administrable`基类。确保在控制器中注册你需要的方法,如`index()`用于展示页面,`store()`用于数据存储等。 接下来,我们...

    js继承 Base类的源码解析

    在JavaScript中,继承是一种核心机制,它允许创建新的对象类型并重用已存在的代码。`Base`类在JavaScript中被广泛使用,作为一个优秀的继承封装,它简化了对象间的继承关系。这里我们将深入解析`Base`类的部分源码,...

    ES6 类(Class)的继承(extends)和自定义存(setter)取值(getter)详解

    ES6 类(Class)的继承(extends)和自定义存(setter)取值(getter)详解,博客地址: http://blog.csdn.net/pcaxb/article/details/53784309

    jsp 自定义标签实例

    - `js`:这个目录可能包含了JavaScript文件,与自定义标签的实现没有直接关系,但可能用于前端交互或数据验证。 - `META-INF`:这个目录通常用于存储元数据,如MANIFEST.MF文件。在自定义标签的上下文中,如果这个...

    ArcGIS JS API创建自定义图层实现在2D地图中渲染水波纹扩散效果.zip

    要创建自定义图层,我们需要继承ArcGIS Layer类,并重写其关键方法,如`draw`或`update`。这些方法将在地图渲染时被调用,让我们有机会添加自己的渲染逻辑。对于水波纹扩散效果,我们需要实现一个算法来模拟水波的...

    spreadjs_自定义撤销、重做命令-demo.zip

    要实现自定义撤销/重做命令,首先需要创建一个新的命令类,该类继承自 SpreadJS 提供的 `gc.spread.sheets.command.Command` 类。在命令类中,你需要重写 `execute` 和 `undo` 方法,分别表示执行命令和撤销命令的...

    COM(activex)使用自定义类型传递数据

    这需要在控件的接口中定义适当的方法,并在JavaScript端使用`new ActiveXObject`来创建和操作自定义类型。 在开发过程中,使用Visual Studio等IDE可以简化许多步骤,例如生成接口的IDL文件,编译为TLB(Type ...

    新手常用的几个JS封装类

    JavaScript中的继承是通过原型链来实现的,新手可能会对如何创建自定义的继承机制感到困惑。可以创建一个基类,比如`BaseClass`,然后通过原型链让其他类继承它。在ES6中,可以使用`class`关键字和`extends`关键字...

    百度地图自定义标注

    3. 创建自定义覆盖物:创建一个新的覆盖物类,继承自`BMap.Overlay`。在这个类中,我们需要覆盖`draw`方法来绘制覆盖物,以及可能的`onClick`等事件处理方法。 4. 定义标注样式:在覆盖物类中,可以设置标注的外观...

    flutter动画效果自定义小部件自定义renderobject

    要创建自定义小部件,你需要继承`StatelessWidget`或`StatefulWidget`类,并实现`build`方法,返回一个`Widget`。`StatelessWidget`适用于不需状态变化的组件,而`StatefulWidget`用于需要管理状态的组件。 对于更...

Global site tag (gtag.js) - Google Analytics