当前位置:首页 > Web开发 > 正文

必须使用new关键字调用

2024-03-31 Web开发

一 、什么是面向东西?

  面向东西(Object Oriented),简写OO,是一种软件开发要领。

  面向东西是一种对现实世界理解和抽象的要领,是计算机编程技术成长到必然阶段后的产物。

  面向东西的观点和应用已逾越了措施设计和软件开发,扩展到如数据库系统、交互式界面、应用布局、应用平台、漫衍式系统、网络打点布局、CAD技术、人工智能等范围。

  面向东西是相对付面向过程来讲的,面向东西要领,把相关的数据和要领组织为一个整体来对待,从更高的条理来进行系统建模,更贴近事物的自然运行模式。

编程范式

  一般可以分为两种:

    声明式,报告计算机应该做什么,但不指定具体要怎么做。如:html,css等

    命令式,存眷计算机执行的法式,即一步一步报告计算机先做什么再做什么。如:js,c++,java,c#,python等

  此中命令式编程又可以为两类

    面向过程:

    将我们要解决问题所需要的法式分析出来,然后用函数把这些法式一步一步实现(有序法式),存眷细节。

    面向东西:

    将问题中的东西抽象出来,既把组成问题的事物分化成各个东西,而解决问题的不是一个个过程化的法式,

    而是操作东西描述、措置惩罚惩罚“问题”的行为调集(离不开面向过程)。

二、面向东西的根基观点 1、东西

  东西的含义是指具体的某一个事物,即在现实生活中能够看得见摸得着的事物,有句话叫做:万物皆东西。

  东西是类的具体实例,东西的抽象是类。

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