首页 > 编程语言 >面向对象编程 -- 创建对象3

面向对象编程 -- 创建对象3

时间:2023-04-15 23:32:47浏览次数:48  
标签:console log -- Object 创建对象 Person 原型 面向对象编程 friend

面向对象编程 -- 创建对象3

一、对象迭代

// ECMAScript 2017 新增了两个静态方法,用于将对象内容转换为序列化的 -- 更重要的是可迭代 -- 格式

// 这两个静态方法 Object.values() 和 Object.entries() 接收一个对象,返回它们内容的数组。

const o = {
	foo: 'bar',
	baz: 1,
	qux: {}
};

console.log(Object.values(o));

console.log(Object.entries(o));

对象迭代 01.png

// 注意,非字符串属性会被转换为字符串输出。

// 另外,这两个方法执行对象的浅复制:

const o ={
	qux: {}
};

console.log(Object.values(o)[0] === o.qux);

console.log(Object.entries(o)[0][1] === o.qux);

对象迭代2 02.png

// 符合属性会被忽略


const sym = Symbol();
const o ={
	[sym]: 'foo'
};

console.log(Object.values(o));

console.log(Object.entries(o));

对象迭代3 03.png

1.其他原型语法

// 为了减少代码冗余,也为了从视觉上更好地封装原型功能,直接通过一个包含所有属性和方法的对象字面量来重写原型成为了一种常见的做法。

function Person() {}

Person.prototype = {
	name: "Nicholas",
	age: 29,
	job: "Software Engineer",
	sayName() {
		console.log(this.name);
	}
};

其他原型语法 04.png

// 虽然 instanceof 操作符还能可靠地返回值,但我们不能再依靠 constructor 属性来识别类型了

console.log(friend instanceof Object);
console.log(friend instanceof Person);

console.log(friend.constructor == Person);
console.log(friend.constructor == Object);

其他原型语法2 05.png

2.原型的动态性

// 因为从原型上搜索值的过程是动态的,所以即使实例在修改原型之前已经存在,任何时候对原型对象所做的修改也会在实例上反映出来。

let friend = new Person();

Person.prototype.sayHi = function() {
	console.log("hi");
};
friend.sayHi();

原型的动态性 06.png

3.原生对象原型

// 原型模式之所以重要,不仅体现在自定义类型上,而且还因为它也是实现所有原生引用类型的模式。

	console.log(typeof Array.prototype.sort);
	console.log(typeof String.prototype.substring);

原生对象原型 07.png

标签:console,log,--,Object,创建对象,Person,原型,面向对象编程,friend
From: https://blog.51cto.com/u_14483476/6192513

相关文章

  • 全排列--Python实现
    给定一个不含重复数字的数组nums,返回其所有可能的全排列。defpermute(nums):track,self.res=[],[]self.backtrack(nums,track)returnself.res#路径:记录在track中#选择列表:nums中不存在于track的那些元素#结束条件:nums中的......
  • 面试官的灵魂一击: MySQL 事务日志是什么?
    SQL(StructuredQueryLanguage)和NoSQL(NotOnlySQL)是两种不同类型的数据库系统。SQL数据库系统采用了关系模型来存储数据,通过使用SQL语言进行数据管理和查询。SQL数据库系统适用于大规模、复杂的数据和事务处理,并且具有数据一致性和完整性的特点。常见的SQL数据库系统包括MySQL、Or......
  • 关键字:super
    关键字:super在Java类中使用super来调用父类中的指定操作:super可用于访问父类中定义的属性super可用于调用父类中定义的成员方法super可用于在子类构造器中调用父类的构造器注意:尤其当子父类出现同名成员时,可以用super表明调用的是父类中的成员super的追溯不仅限于直......
  • ChatGPT教我刷OJ【一】
    promote你现在是一名C语言指导老师,我会给你一些C语言题目,你需要教我写出一个C语言程序,教的过程需要你给我C语言程序以及解析,下面“”中为题目要求题目“1059:奇特的减法时间限制:1Sec内存限制:128MB提交:2421解决:1034[提交][状态][讨论版][命题人:外部导入]题目......
  • Java中的继承
    先看一段代码:classA{publicintx;}classB{publicvoidpri(){System.out.println(x);}}请问这时候调用x,可以得到值么?答案是否定的,因为x在A这个类当中,而这个A类和B类毫不相干,B类中没有x这个变量,所有代码会出现编译错误,但是通过继承,就可以访问的到A类里的x。......
  • java: 程序包org.springframework.web.bind.annotation不存在(已解决)
    今天在创建了一个新的SpringBoot模块后,和往常一样将文件从别的模块中复制过来,然后运行鑫模块就报错了:java:程序包org.springframework.web.bind.annotation不存在,第一反应是将文件所在的包Rebuild一下,但是这次并没有起到作用。然后就想着清除一下缓存,进行步骤:File-->Invalidat......
  • inner join查询出现两个相同的列
    使用GROUPBY语句可以使用GROUPBY语句将结果集按照指定的列进行分组,并对每个分组进行聚合操作。在使用GROUPBY语句时,需要将SELECT语句中选择的列和聚合函数中的列全部包含在GROUPBY子句中。SELECTlog_id,log_user_name,user_role,log_dateFROM`back_use......
  • xss反射型和存储型
    1、反射型1.1发生场景目标网站某处,用户可以get或post基于url的直接参数或路径参数提交数据,或者get或post基于表单form提交数据。(具体取决于服务端接收的编程方法)服务端接收到数据后,未经过充分检测,将其写入到响应的html页面中。如果该数据是攻击者构造的payload,可以包含某些......
  • Rust中的derive属性详解
    1.Rust中的derive是什么?在Rust语言中,derive是一个属性,它可以让编译器为一些特性提供基本的实现。这些特性仍然可以手动实现,以获得更复杂的行为。2.derive的出现解决了什么问题?derive属性的出现解决了手动实现一些特性时需要编写大量重复代码的问题。它可以让编译器自动生成......
  • 简易的延迟任务
    【c#】分享一个简易的基于时间轮调度的延迟任务实现     在很多.net开发体系中开发者在面对调度作业需求的时候一般会选择三方开源成熟的作业调度框架来满足业务需求,比如Hangfire、Quartz.NET这样的框架。但是有些时候可能我们只是需要一个简易的延迟任务,这个时候引......