首页 > 编程语言 >JS中面向对象编程(OOP)的基本原理——this关键字、原型链、构造函数、继承

JS中面向对象编程(OOP)的基本原理——this关键字、原型链、构造函数、继承

时间:2022-09-28 21:12:54浏览次数:57  
标签:name 对象 JS 面向对象编程 duck new 属性 构造函数

面向对象编程(Object Oriented Programming),是软件开发过程的主要方法之一。在OOP中,使用对象组织代码来描述事物及其功能。

虽然点符号是访问对象属性的有效方法(如myobj.name),但存在一个缺陷,如果变量名(如myobj)更改,则引用原始名称的任何代码都需要更新。如果一个对象对其属性有许多引用,则大概率会出错。这时,使用this关键字可以很好地避免这样的问题。

let duck = {
  name: "Aflac",
  numLegs: 2,
  //sayName: function() {return "The name of this duck is " + duck.name + ".";  
  //改用下面这句:
  sayName: function() {return "The name of this duck is " + this.name + ".";}
};

 在当前上下文中,this是指方法关联的对象:duck。如果对象的名称更改为mallard,无需在代码中找到所有duck改为mallard程序也能正常运行,this使代码可重用、易于阅读。

构造函数是创建新对象的函数它定义属于新对象的属性和行为

编写构造函数要遵循一些约定:

1)构造函数是用首字母大写的名称定义的,以区别于非构造函数的其他函数。

2)构造函数使用关键字this设置要创建的对象的属性。构造函数中的“this”总是指正在创建的对象。

3)构造函数定义属性和行为,而不是像其他函数那样返回值。

使用new运算符调用构造函数(如下所示),' new '告诉JavaScript创建一个名为blueBird的新Bird实例。如果没有new操作符,构造函数中的这一操作将不会指向新创建的对象,从而产生意外的结果。现在,blueBird拥有Bird构造函数中定义的所有属性。与任何其他对象一样,可以访问和修改blueBird的属性。

function Bird() {
  this.name = "Albert";
  this.color  = "blue";
  this.numLegs = 2;
}

let blueBird = new Bird();

让构造函数接受参数会更灵活:

function Dog(name,color) {
  this.name=name;
  this.color=color;
  this.numLegs=4;

}
let terrier=new Dog('haha','yellow')
console.log(terrier); //{ name: 'haha', color: 'yellow', numLegs: 4 }

现在可以在创建每个Dog时为其定义属性,这是JavaScript构造函数非常有用的一种方式,基于共享的特征和行为将对象组合在一起,并定义一个自动创建它们的蓝图。

每当构造函数创建一个新对象时,该对象就称为其构造函数的实例。JavaScript提供了一种使用instanceof操作符验证这一点的便捷方法。instanceof允许您将对象与构造函数进行比较,根据该对象是否是使用某构造函数创建的,返回true或false。例子:

function House(numBedrooms) {
  this.numBedrooms = numBedrooms;
}
let myHouse=new House(99);
console.log(myHouse instanceof House); //true

标签:name,对象,JS,面向对象编程,duck,new,属性,构造函数
From: https://www.cnblogs.com/168-h/p/16739337.html

相关文章

  • js判断数组的几种方法
    1.实例的__proto__属性非标准ie浏览器不支持letarr=[1,2,3];console.log('__proto__',arr.__proto__===Array.prototype)2.实例的constructorletarr=[1,2,3];......
  • JS实现数组元素位置交换
    /***数组元素交换位置*@param{array}arr数组*@param{number}index1添加项目的位置*@param{number}index2删除项目的位置*index1和index2分别是两......
  • JSON 转复杂对象
    publicstaticObjectcopyProperties(JSONObjectoriObj,ObjectdesObj){//1.首先要拿到oriObj对象的所有存在值不为空的键-值,放入到集合当中Cla......
  • 自定义toString()方法检测对象类型时的返回值[object x](JS)
    如果想通过 Object.prototype.toString()方法来检测对象类型,则需要以 Function.prototype.call() 或者 Function.prototype.apply() 的形式来调用toString()方法。......
  • MYSQL中的json数据操作
    1.2基础查询操作用法提示:如果json字符串不是数组,则直接使用$.字段名如果json字符串是数组[Array],则直接使用$[对应元素的索引id]1.2.1一般json查询使用 json字段......
  • vite.config.js配置入门详解
    一,搭建vite项目兼容性注意:Vite需要 Node.js 版本14.18+,16+。然而,有些模板需要依赖更高的Node版本才能正常运行,当你的包管理器发出警告时,请注意升级你的Node版......
  • docker配置阿里云加速器(修改daemon.json后缀为conf)
    问题:docker无法拉取镜像,根据网上教程添加 /etc/docker/daemon.json后仍然失败。解决方法:将daemon.json文件名改为daemon.conf 后成功解决问题。网上常见配置方......
  • asdf 安装 python 与 nodejs
    asdf安装python与nodejs系统centos7.9安装asdf官方地址:asdf-vm/asdf:ExtendableversionmanagerwithsupportforRuby,Node.js,Elixir,Erlang&more(gi......
  • [RxJS] Subscription add()
    Youcanuse subsciprtion.add(anotherSubscription)tocombinesubscriptionsandcancelthematthesametime.import{Observable}from'rxjs';constobserver......
  • js异步编程的三种模式
    写在前面javascript语言的执行环境是"单线程"(singlethread),就是指一次只能完成一件任务。如果有多个任务,就必须排队,等前面一个任务完成,再执行后面一个任务,以此类推。......