十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要为大家展示了“ECMAScript6中Class对象的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ECMAScript6中Class对象的示例分析”这篇文章吧。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、网络空间、营销软件、网站建设、海城网站维护、网站推广。面向对象的语言有一个标志,那就是他们都有类的概念,通过类可以创建任意多个具有相同属性和方法的对象。
ECMAScript5中没有类的概念,因此它的对象和基于类的语言中的对象有所不同。
Javascript生成对象的传统方法是通过构造函数来实现的
function Person(name, age){ this.name = name; this.age = age; this.sayHello = function(){ return "Hello "+ this.name; } } var person = new Person("dahan",18); person.sayHello(); //Hello dahan
上述这种方式因为和Javascript中声明方法的形式一样,所以对象和方法的区分并不明显,很容易造成混淆。
ES6引入了Class
(类)的概念,我们通过ES6的语法进行创建对象的时候,可以像Java语法一样,使用关键字class
,用来定义类。当然,这种语法的功能,通过ES5也都可以实现,它只是让类的定义更加清晰,更容易理解。
//类的定义 class Person { //ES6中新型构造器 constructor(name) { this.name = name; } //实例方法 sayName() { console.log("我的名字叫"+ this.name); } } //类的继承 class Programmer extends Person { constructor(name) { //直接调用父类构造器进行初始化 super(name); } program() { cosnole.log("这是我的地盘"); } } //运行测试 var person = new Person('lingxiao'); var coder = new Programmer('coder'); person.sayName(); //我的名字叫lingxiao coder.sayName(); //我的名字叫coder coder.program(); //这是我的地盘
下面来注意讲述一下上述代码中出现的语法。
constructor
constructor
是类的默认方法,就像Java中的main方法一样,每个类都必须有constructor
方法。
在通过new
实例化对象的时候,就会自动调用constructor
方法,得到的也就是constructor
返回的值。constructor
默认返回当前类的实例对象(this)
,但是我们也可以指定另外一个对象,当然,这样就会导致实例化出来的对象,并不是当前类的实例。
class Person { constructor(){ var ob = new Object(); return Ob; } sayHello(){ return "Hello World" } } var person = new Person(); person.sayHello(); //Uncaught TypeError: person.sayHello is not a function
我们在实例化对象的时候,ES6规定我使用new关键字,如果直接调用,会当成函数来调用。
class Person { constructor(name){ this.name = name; } }; var person = Person("dahan"); //Uncaught TypeError: Class constructor Person4 cannot be invoked without 'new'
this
在最开始的代码中,我们看到了this,this在类中指向的就是实例本身,但是如果我们在类的方法中使用了this,单独调用此方法的时候,就会出现错误。
class Person{ constructor(name){ this.name = name; } sayHello() { return "Hello "+this.name } } var person = new Person("dahan"); var sayHello = person.sayHello; sayHello(); //Uncaught TypeError: Cannot read property 'name' of undefined
针对这个我们可以很简单的在构造方法中绑定this
class Person{ constructor(name){ this.name = name; this.sayHello = this.sayHello.call(this); } sayHello() { return "Hello "+this.name } }
继承extend
我们想要在一个类上扩展一些属性,但又不想修改原类,就用到了继承。
//类的继承 class Programmer extends Person { constructor(name,age) { this.age = age;//报错 //直接调用父类构造器进行初始化 super(name); } program() { cosnole.log("这是我的地盘"); } }
使用继承的时候,需要用super
关键字来调用父类,super(name)
就呆逼啊调用父类的constructor
方法。
另外,我们使用的继承的时候,super
关键字也帮我们改变了this
的指向,所以我们必须要先调用super
方法,然后才能使用this
。ES6要求,子类的构造函数必须执行一次super
函数,否则就会报错。
最后
class
关键字的出现,也让Javascript看上去更加像一个面向对象语言,愿Javascript越变越好越易用。
以上是“ECMAScript6中Class对象的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联网站建设公司行业资讯频道!
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。