必须使用new关键字调用
一 、什么是面向东西?
面向东西(Object Oriented),简写OO,是一种软件开发要领。
面向东西是一种对现实世界理解和抽象的要领,是计算机编程技术成长到必然阶段后的产物。
面向东西的观点和应用已逾越了措施设计和软件开发,扩展到如数据库系统、交互式界面、应用布局、应用平台、漫衍式系统、网络打点布局、CAD技术、人工智能等范围。
面向东西是相对付面向过程来讲的,面向东西要领,把相关的数据和要领组织为一个整体来对待,从更高的条理来进行系统建模,更贴近事物的自然运行模式。
编程范式一般可以分为两种:
声明式,报告计算机应该做什么,但不指定具体要怎么做。如:html,css等
命令式,存眷计算机执行的法式,即一步一步报告计算机先做什么再做什么。如:js,c++,java,c#,python等
此中命令式编程又可以为两类
面向过程:
将我们要解决问题所需要的法式分析出来,然后用函数把这些法式一步一步实现(有序法式),存眷细节。
面向东西:
将问题中的东西抽象出来,既把组成问题的事物分化成各个东西,而解决问题的不是一个个过程化的法式,
而是操作东西描述、措置惩罚惩罚“问题”的行为调集(离不开面向过程)。
东西的含义是指具体的某一个事物,即在现实生活中能够看得见摸得着的事物,有句话叫做:万物皆东西。
东西是类的具体实例,东西的抽象是类。
2、类类是具有不异特性(数据元素)和行为(成果)的东西的抽象,代表一类事物的抽象描述。
在代码中:类比如是一个模板,可以批量出产。
类是东西的抽象,类的具体化就是东西。
类的实现
原本JS不撑持面向东西(oo),所以在ES5用函数模拟出类,在ES6时插手语法糖,书写起来越发清晰、更像面向东西编程的语法。
类的素质是函数:结构函数+全局大众区域 prototype。
ES5
//混合模式:结构函数模式+原型模式 function Person(name, age) {//结构函数模式 this.name = name; /*属性*/ this.age = age; this.study = function () { console.log(this.name + ‘在运动‘); } } //原型模式 prototype,原型链上面的属性会被实例东西共享 Person.prototype.sex = "男";//共有的属性 Person.prototype.exercise = function () {//共有的函数 console.log(this.name + ‘在锻炼‘); } //类的静态属性和要领不会被实例东西共享 Person.num = 11234;//界说静态属性 Person.printNum = function () {//界说静态要领 console.log(this.num); }//注:函数也是一个东西,所谓的静态属性要领,素质就是给名为Person的东西添加了属性和要领 var stu = new Person(‘张三‘, 20); console.log(stu);//Person { name: ‘张三‘, age: 20, study: [Function] } console.log(stu.sex);//男 stu.study();//挪用自带要领 => 张三在运动 stu.exercise(); //挪用原型要领 => 张三在锻炼 console.log(Person.num);//11234 静态属性和要领 通过 类名.要领(属性名) 挪用或访谒 console.log(stu.num);//undefined 实例东西不能使用 Person.printNum();//11234 stu.printNum();//报错 stu.printNum is not a function
ES6
class Person { constructor(name, age) {//结构函数 this.name = name; /*属性*/ this.age = age; this.sex = "男"; this.study = function () { console.log(this.name + ‘在运动‘); } } static num = 11234;//界说静态属性 static printNum() {//界说静态要领 console.log(this.num); } exercise() {//共有的函数 console.log(this.name + ‘在锻炼‘); } } var stu = new Person(‘张三‘, 20); console.log(stu);//Person { name: ‘张三‘, age: 20, sex: ‘男‘, study: [Function] } console.log(stu.sex);//男 stu.study();//张三在运动 stu.exercise(); //张三在锻炼 console.log(Person.num);//11234 console.log(stu.num);//undefined Person.printNum();//11234 stu.printNum();//报错 stu.printNum is not a function
注:两种方法都能告成的声明一个Person类,此刻一般就用ES6方法,但是其实内部是用ES5的方法运行的,ES6方法相当于一个语法糖。
关于new每次使用new关键字会执行的法式:
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32457.html