javascript里构建类的4种方式
来源:互联网 发布:大学手机必备软件 编辑:程序博客网 时间:2024/06/05 20:49
javascript里构建类主要有4种方式
1.构造方式定义类
2.原型方式定义类
3.构造和原型结合方式创建类
4.动态的原型方式
各有优缺点,具体如下
1.构造方式定义类,优点:多个实例对象不共享类的属性值,缺点:每个实例对象都会产生出一个函数say
//多个实例对象不共享类的属性值:
2.原型方式定义类,缺点:类的属性值如果是引用类型的(非Number和String类型),则多个实例对象共享
类的属性值如果是引用类型的(非Number和String类型),则多个实例对象共享:
3.构造和原型结合方式创建类:优点:类的方法只会产生一个,不会产生大量方法,同时属性还不共享;缺点:属性和方法分开定义不是太好。
4.动态的原型方式:优点:类的方法只会产生一个,不会产生大量方法,同时属性还不共享,同时属性和方法不是分开定义的
总结:
构造方式定义类:缺点:类里的方法,每个实例对象都会产生一个,导致产生大量方法;优点:所有实例对象都单独拥有一份类里的属性,即属性不共享
原型方法定义类:缺点:所有实例对象都共同拥有一份类里的属性,即属性共享。优点:类的方法只会产生一个,不会产生大量方法
构造和原型结合方式创建类:优点:类的方法只会产生一个,不会产生大量方法,同时属性还不共享;缺点:属性和方法分开定义不是太好。
1.构造方式定义类
2.原型方式定义类
3.构造和原型结合方式创建类
4.动态的原型方式
各有优缺点,具体如下
1.构造方式定义类,优点:多个实例对象不共享类的属性值,缺点:每个实例对象都会产生出一个函数say
- //构造方式定义类,优点:多个实例对象不共享类的属性值,缺点:每个实例对象都会产生出一个函数say
- function User(){
- this.username = "zhangsan";//this.不能丢
- this.say = function(){//this.不能丢
- alert("username:" + this.username );//this.不能丢
- }
- //下面注释的这种写法不对
- // function say(){
- // alert("username:" + this.username );
- // }
- }
- var user = new User();
- user.username = "lisi";
- user.say();//username:lisi
- var user1 = new User();
- user1.say();//username:zhangsan,不受user对象的影响
//多个实例对象不共享类的属性值:
- //多个实例对象不共享类的属性值,如下:
- function User(){
- this.username = new Array();//this.不能丢
- this.say = function(){//this.不能丢
- alert("username:" + this.username );//this.不能丢
- }
- }
- var user = new User();
- user.username.push("zhangsan");
- user.say();//username:zhangsan
- var user1 = new User();
- user1.say();//user1的username为空,不为zhangsan,因为user1的属性值不受user影响
2.原型方式定义类,缺点:类的属性值如果是引用类型的(非Number和String类型),则多个实例对象共享
- //原型方式定义类,缺点:类的属性值如果是引用类型的(非Number和String类型),则多个实例对象共享
- function User(){
- }
- User.prototype.username = "zhangsan";
- User.prototype.say = function(){
- alert("username: " + this.username );
- }
- var user = new User();
- user.username = "lisi";
- user.say();//username:lisi
- var user1 = new User();
- user1.say();//username:zhangsan
类的属性值如果是引用类型的(非Number和String类型),则多个实例对象共享:
- //类的属性值如果是引用类型的(非Number和String类型),则多个实例对象共享,如下
- function User(){
- }
- User.prototype.username = new Array();
- User.prototype.say = function(){
- alert("username: " + this.username );
- }
- var user = new User();
- user.username.push("zhangsan") ;
- user.say();//username:zhangsan
- var user1 = new User();
- user1.say();//username:zhangsan,因为user1属性也会受到user的影响,user1和user指向同一引用,即共享同一属性
3.构造和原型结合方式创建类:优点:类的方法只会产生一个,不会产生大量方法,同时属性还不共享;缺点:属性和方法分开定义不是太好。
- //构造和原型结合方式创建类:优点:类的方法只会产生一个,不会产生大量方法,同时属性还不共享;缺点:属性和方法分开定义不是太好。
- function User(){
- this.username = "zhangsan";
- }
- User.prototype.say = function(){
- alert("username: " + this.username );
- }
- var user = new User();
- alert(user.username);
4.动态的原型方式:优点:类的方法只会产生一个,不会产生大量方法,同时属性还不共享,同时属性和方法不是分开定义的
- ////动态的原型方式:优点:类的方法只会产生一个,不会产生大量方法,同时属性还不共享,同时属性和方法不是分开定义的
- function User(){
- this.username = "zhangsan";
- if(typeof User.flag == "undefined"){
- alert("execute...");
- User.prototype.say = function(){
- alert("username: " + this.username );
- }
- User.flag = true;
- }
- }
- var user1 = new User();//execute...
- var user2 = new User();//不会打印出execute...,则说明方法只创建了一次,即方法只会产生一个
- user1.say();//username
总结:
构造方式定义类:缺点:类里的方法,每个实例对象都会产生一个,导致产生大量方法;优点:所有实例对象都单独拥有一份类里的属性,即属性不共享
原型方法定义类:缺点:所有实例对象都共同拥有一份类里的属性,即属性共享。优点:类的方法只会产生一个,不会产生大量方法
构造和原型结合方式创建类:优点:类的方法只会产生一个,不会产生大量方法,同时属性还不共享;缺点:属性和方法分开定义不是太好。
动态的原型方式:优点:类的方法只会产生一个,不会产生大量方法,同时属性还不共享,同时属性和方法不是分开定义的
js类的方法和原型方法的区别:类方法调用必须用类名调用,原型定义的方法只能通过对象来调用。最重要的是类方法只能调用类属性,无法和某个具体对象产生关系,而通过原型定义的方法可以操作某个对象实例的属性:优点是两者内存中均只有一份
- javascript里构建类的4种方式
- javascript 里类的五种实现方式
- JavaScript 构建类和创建对象的方式
- javascript---类的构建
- javascript (对象构建方式)
- 4种构建流的方式实例
- javascript里的"类"
- 【String构建方式】 构建的两种不同的方式
- javascript里的类思想
- javascript里的类思想
- Javascript三种文字编码方式(对应java里的编解码)
- asp.net 2.0 中updatePanel里执行javaScript的方式
- XFire构建client的几种方式
- EAR项目构建的几种方式
- EAR项目构建的几种方式
- 两种构建位图的方式
- 构建yum的三种方式
- hessian构建RPC的两种方式
- 基本类型和对象类型进行计算以及自动类型转换
- HDU2795 billboard【转化为线段树。】
- android手机游戏开发Cocos2d-x开发分享
- 雷电
- list列表中添加多个【只修改了一个属性的对象】
- javascript里构建类的4种方式
- 数字图像处理 读书笔记四 电磁波谱
- android或linux调试addr2line工具锁定命令的使用
- 编程之美2.5 寻找最大的k个树
- 装饰模式C++实现
- .NET 对象创建
- hello
- Android异常:android.os.NetworkOnMainThreadException
- Android添加一个新的按键