首页前端开发JavaScript详解js创建对象的几种方式和对象方法

详解js创建对象的几种方式和对象方法

时间2024-01-31 23:46:02发布访客分类JavaScript浏览358
导读:收集整理的这篇文章主要介绍了详解js创建对象的几种方式和对象方法,觉得挺不错的,现在分享给大家,也给大家做个参考。 这篇文章是看js红宝书第8章,记的关于对象的笔记(第二篇)。创建对象的...
收集整理的这篇文章主要介绍了详解js创建对象的几种方式和对象方法,觉得挺不错的,现在分享给大家,也给大家做个参考。

这篇文章是看js红宝书第8章,记的关于对象的笔记(第二篇)。

创建对象的几种模式:

工厂模式:

工厂是函数的意思。工厂模式核心是定义一个返回全新对象的函数。

 function getObj(name, age) {
  let obj = {
}
  obj.name = name  obj.age = age  return obj }
     let PErson1 = getObj("cc", 31)

缺点:不知道新创建的对象是什么类型

构造函数模式:

通过一个构造函数,得到一个对象实例。
构造函数和工厂模式区别是:
1,构造函数函数体加了this
2,构造函数没有return
3,构造函数调用时,用new关键字

 function CreateObj(name, age) {
  this.name = name  this.age = age }
     let person1 = new CreateObj("cc", 31) console.LOG(person1) console.log(person1.constructor === CreateObj);
     // true console.log(person1 instanceof CreateObj);
     // true

关于构造函数的两个问题:

1,构造函数和普通函数唯一区别是调用方式。构造函数要用new关键字。如果不用new,则是往Global对象上加属性。下面例子中,CreateObj方法,往window对象上加了name和age属性

 function CreateObj(name, age) {
  this.name = name  this.age = age }
     CreateObj('cc', 10) console.log(window.name) // 'cc'

2,构造函数存在的问题: 构造函数体内的方法,每次创建一个实例,都会创建一遍。

person1.sayName( ) === person2.sayName( ) // false

解决方法是,将sayName定义在createObj外面。

 function sayName() {
  console.log(this.name) }
 function CreatePerson(name, age) {
  this.name = name  this.age = age  this.sayName = sayName }
     let person1 = new CreatePerson('joy', 31) person1.sayName()

但是,这样会让自定义类型引用的代码不能很好聚在一起。

原型模式:

原理是,每个函数都有一个PRototype属性。prototype是一个对象,里面定义的属性和方法会被所有实例共享。
关于原型模式,有两个等式:

 function Person() {
 }
     let person1 = new Person() console.log(person1.__proto__ === Person.prototype)  // true console.log(Person.prototype.constructor === Person);
     // true

关于原型对象的三个方法:isPrototype , getPrototypeof,setPrototypeOf, Object.create()

// isPrototypeOf判断构造函数的原型对象是否是实例的原型对象function Person() {
}
     let person1 = new Person() console.log(Person.prototype.isPrototypeOf(person1));
     // true
// 获取对象的原型对象 function Person() {
}
     let person1 = new Person() console.log(Object.getPrototypeOf(person1) === Person.prototype);
    
// 将某个对象,设为另一个对象的原型对象 let person1 = {
name: "cc"}
 let person2 = {
age: 32}
     Object.setPrototypeOf(person1,person2) console.log(person1.name, person1.age);
     // cc 32
// 以某个对象为原型对象,创建一个新对象  let person1 = {
name: "cc"}
     let person2 = Object.create(person1) person2.age = 30 console.log(person2.name, person2.age);
    

当访问一个对象person的name属性时,是按照以下步骤去访问:
1,person上如果有name属性(即便这个属性是null,也会返回null),返回name属性值;没有,继续去原型对象Person.prototype上找
2,如果原型上有name属性,返回原型上name属性值;没有,则返回undefined

判断一个属性是在实例上,还是在原型上,可以用hasOwnProperty

 function Person() {
}
     Person.prototype.name = "cc" let person1 = new Person() console.log(person1.name) // 'cc' console.log(person1.hasOwnProperty("name"));
     // false

判断一个对象上是否有个某个属性,用in操作符

// 对象自身 or 原型上找到,都返回true function Person() {
}
     Person.prototype.name = "cc" let person1 = new Person() console.log("name" in person1) // true console.log(person1.hasOwnProperty("name"));
     // false

访问对象的属性的方法:

Object.keys( )for ... in // 继承属性也会遍历出来Object.getOwnPropertynames(obj) // 会列出可枚举和不可枚举属性,其他和 Object.keys( )结果一样Object.getOwnPropertySymbols(obj) // 和getOwnPropertyNames类似,只是仅针对symbolReflect.ownKeys(obj) // 和Object.keys( )结果一样

其他访问对象属性和属性值的方法:
Object.values( ) 对象值组成的数组,会省掉Symbol型。
Object.entries( ) 对象键值对组成的数组,会将键,转化成字符串,省掉Symbol型。

 function Person() {
}
     Person.prototype.name = "cc" let person = new Person() person.age = 21 let sy = Symbol('sy') person[sy] = 'smile' console.log(Object.values(person)) // [ 21 ] console.log(Object.entries(person)) // [ [ 'age', 21 ] ]

到此这篇关于详解js创建对象的几种方式和对象方法的文章就介绍到这了,更多相关js创建对象内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

您可能感兴趣的文章:
  • js 创建对象的多种方式与优缺点小结
  • javascript面向对象创建对象的方式小结
  • JS中的函数与对象的创建方式
  • JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
  • JavaScript创建对象的常用方式总结
  • JavaScript实现创建自定义对象的常用方式总结
  • JavaScript创建对象的七种方式全面总结
  • 基于JS对象创建常用方式及原理分析
  • JavaScript创建对象的七种方式(推荐)
  • JS创建对象的四种方式

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: three.js 实现露珠滴落动画效果的...下一篇:vue 使用饿了么UI仿写teambition...猜你在找的JavaScript相关文章 html font标签如何设置字体大小?html font标签属性用法介绍2022-05-16vue3+TypeScript+vue-router的使用方法2022-04-16vue3获取当前路由地址2022-04-16如何利用React实现图片识别App2022-04-16JavaScript展开运算符和剩余运算符的区别详解2022-04-16微信小程序中使用vant框架的具体步骤2022-04-16Vue elementUI表单嵌套表格并对每行进行校验详解2022-04-16如何利用Typescript封装本地存储2022-04-16微信小程序中wxs文件的一些妙用分享2022-04-16JavaScript的Set数据结构详解2022-04-16 其他相关热搜词更多phpjavapython程序员loadpost-format-gallery

若转载请注明出处: 详解js创建对象的几种方式和对象方法
本文地址: https://pptw.com/jishu/594638.html
成员函数可以重载吗? vue实现拖拽进度条

游客 回复需填写必要信息