es6---class

传统的对象生成,大都是通过构造器生成,这是与其他传统语言,如java、c等不同的,这很容易让新入门学习的人感到困惑。因此,在此基础上,es6新标准推出一种新的生成实例化对象的方法---class类。

//传统的对象生成
		function Point(x,y){
			this.x=x;
			this.y=y;
		};
		Point.prototype.toString = function(){
			return '("+this.x+","+this.y+")';
		};
		var p = new Point(1,2);
		console.log(p.toString());

/新的写法
		class Person{
			//属性
			constructor(age,name){//构造方法,对应构造函数,必须要有
				this.age=age;
				this.name=name;
			};
			//方法
			toString(){
				return this.age+"---"+this.name;
			};
		};
		var p1 = new Person(12,"aaa");//直接传入
		console.log(p1.age,p1.name);//12  aaa
		console.log(p1.toString());

上面的代码,通过class定义了一个类,类里面有一个方法“constructor”方法,这是构造方法,而里面的this这是实例对象。这个方法和构造函数一样。

需要注意的是,每个类都必须有构造方法,如果一个空的类,里面没有写,会被默认加上构造方法;而类里面的方法,其实和利用构造函数在原型链上写方法是一样的,

//在类里面写方法,和使用构造器在原型上写方法一样
		/*  
		class Point{
			constructor(...set){
				...
			}
			toString(){
				...
			}
			toValue(){
				...
			}
		}

		等同于
		Point.prototype = {
			toString() {},
  			toValue() {},
  			}
  			在类的实例上调用方法,其实就是在原型上调用方法。
		 */

在以前我们使用构造函数创建对象时,生成的子类,是无法直接继承的,需要用到原型。而通过class则解决了这个问题,我们可以通过super直接继承父类的属性和方法

//继承
		 class Cars{
		 	constructor(name,jq){
		 		this.name=name;
		 		this.jq=jq;
		 	};
		 	Run(){
		 		console.log("跑起来了!")
		 	}
		 };
		 class Bus extends Cars{
		 	constructor(name,jq,id){
		 		super(name,jq);//必须使用super后,才能使用this
		 		this.id=id;
		 	};
		 	kuairun(){
		 		super.Run;
		 		console.log("跑的很快!");
		 	}
		 };

		 var bus = new Bus("大奔",1190,"123129kkosda");
		 console.log(bus.name,bus.jq,bus.id);
		 bus.Run();
		 bus.kuairun();

上面的例子中,Bus是继承Cars的,我们通过super,在构造方法内继承属性,但需要注意的是,我们必须先使用super,才能使用this关键字,否者会报错。下面的方法继承,看似是在方法内的,其实他们是2个独立的,相互不会影响。

关于class的原型,prototype 、__proto__,和构造函数类似,对象都有__proto__属性,指向对应的构造函数的prototype属性

 console.log(Bus.__proto__,);//Cars
 console.log(Bus.prototype.__proto__);//Cars.prototype

 

转载于:https://my.oschina.net/u/3470995/blog/1544379

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值