爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      重温javascript --(三)对象

      首页 知识中心 软件开发 文章详情页

      重温javascript --(三)对象

      2024-12-23 09:16:35 阅读次数:20

      Object,proto,原型,对象,属性,指向,构造函数

      对象

      一. 对象创建

      1. var a = {}字面量创建

      2. 构造函数

      1. 系统构造函数Object(): var per = new Object()

      2. 自定义构造函数

         function Person(name){
             = name,
            this.age = 18
          }
          var person = new Person('limei')
        

        new 关键字 会在构造函数内部:

        1. 隐性创建 var this ={};
        2. 赋值 = xxx;
        3. 最后隐性返回 return this;
      3. Object.create()方法:

      Object.create(proto, [propertiesObject])

      • proto:必需。新创建的对象的 __proto__。
      • propertiesObject:可选。如果该参数是一个对象,那么其自有可枚举属性(即那些自有属性且其 enumerable 为 true 的属性)的键值对会被添加到新创建对象的对应属性上,作为新创建对象的自有属性。这些属性的描述符由 propertiesObject 中对应属性的值提供。

      示例:

      // 1.
      const obj = Object.create(null) // obj 为 {}
      console.log(emptyObject.__proto__); // 输出:undefined
      
      // 2.
      const person = {
      	sex: '男',
      	say: function () {
      		console.log(`${}说:我今年${this.age}了,我的性别是:${this.sex}`)
      	}
      }
      const xiaoMing = Object.create(person, {
      	// 定义一个数据描述符  
      	age: {  
      	    value: 19,  
      	    writable: true,  
      	    enumerable: true,  
      	    configurable: true  
      	},
      	// 定义一个访问器描述符  
      	look: {  
      	  get: function() {  
      	    return 'Hello, ' + ;  
      	  },  
      	  enumerable: true,  
      	  configurable: true  
      	} 
      })
      // 输出
       = "小明"
      xiaoMing.sex = "女"
      xiaoMing.say() // 小明说:我今年19了,我的性别是:女
      xiaoMing.look // 'Hello, 小明'
      
      

      3. 属性引用

      对象属性可以通过两种主要方式访问:点符号(.)和方括号([])

      // 1. 点符号(.)
      let obj = {  
        name: 'Alice',  
        age: 30,
        'my-prop': '自定义的属性' 
      };  
        
      console.log(); // 输出 'Alice'  
      console.log(obj.age);  // 输出 30
      
      // 2. 方括号([])
      console.log(obj['age']) // 输出30
      
      let propName = 'name';  
      console.log(obj[propName]); // 输出 'Alice'  
      
      console.log(obj['my-prop']) // 输出 自定义的属性
      

      二. 原型(prototype)

      1. obj.prototype 对象的原型(每个函数对象才会拥有prototype) prototype是函数对象的一个属性,它定义了构造函数制造出的对象的公共祖先,通过该构造函数产生的对象,可以继承改原型的属性和方法,原型也是对象。
      2. __proto__
        • 每个对象都有__proto__属性,去访问自己的原型
        • 大多数对象最后的原型都会指向Object.prototype

        var obj = Object.create(null); // obj无原型,无__proto__,无constructor

        1. var obj = {};
          obj.__proto__ = Object.prototype;
        
        2.  = '构造函数Person的原型'
          function Person(){};
          var person = new Person();
          ; // 访问先查看自身属性,没有去其原型上查找
          person.__proto__  ------>  Person.prototype
        
      3. 每个原型对象都会自动获得一个constructor属性,这个属性指向创建它的构造函数。

        这样做的目的是为了在原型链上能够正确地追踪到实例的构造函数。 通常,当你定义一个构造函数并创建它的实例时,这个实例的constructor属性会指向该构造函数。

        function Person(name, age) {  
           = name;  
          this.age = age;  
        }  
          
        // 构造函数上prototype的constructor指向自己 
        console.log(Person.prototype.constructor === Person); // 输出: true  
        
        // 创建一个Person实例  
        let person = new Person('Alice', 30);  
          
        // 检查person的constructor属性  
        console.log(person.constructor === Person); // 输出: true  
        console.log(); // 输出: "Person"
        
      4. Object.create(proto, [propertiesObject]) 建一个新对象,使用现有的对象来提供新创建的对象的__proto__。
      5. call, apply 改变this指向,

      call和apply的主要区别在于它们如何接收参数: call接受一个参数列表,而apply接受一个参数数组。 这两个方法都允许你改变函数内部的this上下文,这在处理回调函数、对象方法以及继承等场景中非常有用

      // 1. call
      function Car(age, sex){
         = '小刘',
        this.age = age,
        this.sex = sex
      };
      var obj = {};
      Car.call(obj,112, '男'); // 将Car内this的指向指向 obj
      
        // 2. apply
      function Car(age, sex){
         = '小刘',
        this.age = age,
        this.sex = sex
      };
      var obj = {};
      Car.apply(obj,[112, '女']);
      

      三. 继承、命名空间、对象枚举

      1. 继承 <div id="inherit"></div>

        // 继承方法
        var inherit = (function(){
          var F = function (){}; // 闭包私有化变量,不属于对象,和对象同属于同一个AO对象
          return function(Target,Origin){
            F.prototype = Origin.prototype;
            Target.prototype = new F();
            Target.prototype.constructor = Target;
            Target.prototype.uber = Origin.prototype;
          }
        }());
        
        function Car(name){
           = name
        };
        Car.prototype.whool = 4;
        
        function BaoMa(){}
        
        inherit(BaoMa,Car);
        
        BaoMa.prototype.age = '百年历史';
        var baoma = new BaoMa();
        
      2. 命名空间

        // 1.
        var obj = {
            eat:{
              li:{
                name: '小李定义的eat'
              },
              zhang:{
                name: '小张定义的eat'
              }
            },
            drink:{
              li:{
                  name:'小李定义的drink'
              }
            },
          };
          <!-- 调用 -->
          var li = obj.eat.li;
          
        
        // 2. 利用闭包实现,不污染全局变量
        
        var name = '全局name变量';
        var init = (function (){
          var name = '函数内部name变量';
          function say(){
              console.log(name);
          }
          return function(){
             say()
          }
        }());
        
        
      3. 对象枚举

        1. for...in语句用于遍历一个对象的可枚举属性(包括自有属性和继承自原型链的属性)。它会枚举对象的每一个可枚举属性,并为每个属性执行一次循环体。
        var obj = {
          name:'小刘',
          age: 18,
          sex: 'male',
          wife: '小宋',
           __proto__:{
            lastName:'Deng'
          }
        }
        Object.prototype.abc = 123;
        for(var prop in obj){
        	console.log(`${prop} -- ${obj[prop]}`)
        }
        
        1. hasOwnProperty是一个方法,用于检查一个对象自身(不包括其原型链)是否具有指定的属性
        // 上例 obj
        for(var prop in obj){
          if(obj.hasOwnProperty(prop)){
            console.log(`${prop} -- ${obj[prop]}`)
          }
        }
        
        1. in 运算符用于检查对象自身及其原型链中是否存在某个属性。它会返回一个布尔值,如果对象或其原型链上有一个名为给定字符串的属性,则返回 true;否则返回false
        // 上例 obj
        console.log('name' in obj) // true
        console.log('abc' in obj) // true
        
        1. instanceof是一个运算符,用于测试构造函数的 prototype 属性是否出现在对象的原型链中的任何位置。换句话说,它用来判断一个对象是否是一个构造函数的实例
        // 区分数组[]和对象{}
        //  typeof([]); ---> object 
        //  typeof({}); ---> object
        var arr = [];
        var obj = {};
        // 1. instanceof 方法
        arr instanceof Array;  // true
        obj instanceof Array;  // false
        arr instanceof Object;  // true
        obj instanceof Object;  // true
        // 2. constructor 
        arr.constructor // function Array
        obj.constructor // function Object
        // 3. call toString
        Object.prototype.toString.call([]); // '[object Array]'
        Object.prototype.toString.call({}); // '[object Object]'
        

      四、 this

      1. 函数预编译过程 this 指向window
      2. 全局作用域里 this指向window
      3. call/apply: 改变函数运行时 this指向
      4. obj.func(): func()里的this 指向obj(谁调用指向谁)

      五、arguments 函数实参的类数组对象(use strict严格模式下禁用)

      1. arguments.length 对象长度
      2. arguments.callee 指向函数自身引用
      3. func.caller 函数的属性,函数被谁调用,返回谁
      // 'use strict' // 严格模式下禁用
      var num = (function (n) {
        if (n === 1) {
          return 1
        }
        return n * arguments.callee(n - 1)
      }(5))
      num // 120
      
      function demo() {
        test();
      }
      function test() {
        console.log(test.caller);
      }
      demo();
      
      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/Itstars/10643654,作者:新茶十九,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:Java中的多态性详解

      下一篇:使用Java实现微服务间的事件驱动架构

      相关文章

      2025-05-19 09:04:44

      js小题2:构造函数介绍与普通函数对比

      js小题2:构造函数介绍与普通函数对比

      2025-05-19 09:04:44
      new , 关键字 , 函数 , 对象 , 构造函数
      2025-05-19 09:04:44

      地址与指针

      地址与指针

      2025-05-19 09:04:44
      char , 地址 , 指向
      2025-05-19 09:04:22

      外设驱动库开发笔记54:外设库驱动设计改进的思考

      外设驱动库开发笔记54:外设库驱动设计改进的思考

      2025-05-19 09:04:22
      使用 , 函数 , 初始化 , 定义 , 对象
      2025-05-19 09:04:22

      外设驱动库开发笔记46:MAX31855热偶变送器驱动

      外设驱动库开发笔记46:MAX31855热偶变送器驱动

      2025-05-19 09:04:22
      对象 , 温度
      2025-05-16 09:15:24

      jQuery遍历对象、数组、集合

      jQuery遍历对象、数组、集合

      2025-05-16 09:15:24
      jQuery , 对象 , 数组 , 遍历 , 集合
      2025-05-14 10:33:31

      计算机初级选手的成长历程——操作符详解(2)

      计算机初级选手的成长历程——操作符详解(2)

      2025-05-14 10:33:31
      对象 , 操作 , 操作符 , 表达式 , 运算 , 逗号 , 逻辑
      2025-05-14 10:33:16

      C++ 11新特性之unique_ptr

      在C++ 11标准中,智能指针作为一种强大的资源管理工具被引入,极大地提升了代码的健壮性和安全性。其中,std::unique_ptr作为唯一所有权智能指针,以其独特的非拷贝特性及自动内存释放机制,成为现代C++编程中的重要组件。

      2025-05-14 10:33:16
      ptr , std , unique , 指向 , 指针 , 赋值
      2025-05-14 10:33:16

      30天拿下Python之使用Json

      Json的英文全称为JavaScript Object Notation,中文为JavaScript对象表示法,是一种存储和交换文本信息的语法,类似XML。Json作为轻量级的文本数据交换格式,比XML更小、更快,更易解析,也更易于阅读和编写。

      2025-05-14 10:33:16
      json , Json , Python , 字符串 , 对象 , 序列化 , 转换
      2025-05-14 10:03:05

      C++ 11新特性之bind

      std::bind是C++ 11中<functional>头文件提供的一个函数模板,它允许我们将函数或成员函数与其部分参数预先绑定在一起,形成一个新的可调用对象(英文为:Callable Object)。

      2025-05-14 10:03:05
      bind , std , 函数 , 参数 , 对象 , 绑定 , 调用
      2025-05-14 10:03:05

      C++ 11新特性之语法甜点2

      C++ 11新特性之语法甜点2

      2025-05-14 10:03:05
      函数 , 初始化 , 基类 , 构造函数 , 编译器 , 语法
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5264621

      查看更多

      最新文章

      外设驱动库开发笔记54:外设库驱动设计改进的思考

      2025-05-19 09:04:22

      外设驱动库开发笔记46:MAX31855热偶变送器驱动

      2025-05-19 09:04:22

      30天拿下Python之使用Json

      2025-05-14 10:33:16

      C++ 11新特性之unique_ptr

      2025-05-14 10:33:16

      C++ 11新特性之语法甜点1

      2025-05-14 10:03:05

      C++ 11新特性之week_ptr

      2025-05-14 10:03:05

      查看更多

      热门文章

      游戏编程之十一 图像页CPICPAGE介绍

      2022-11-28 01:25:04

      C++拷贝构造函数(深拷贝,浅拷贝)详解

      2023-03-30 09:59:46

      C++类的实例:一个向量类(Vector)

      2023-03-02 02:40:07

      Java默认构造函数的作用

      2023-04-10 08:55:40

      C++11新的类功能

      2023-02-08 10:33:56

      Python基础教程(第3版)中文版 第9章 魔法方法、特性和迭代器(笔记)

      2023-02-13 07:59:59

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      XML元素和属性

      Java 序列化与反序列化: 数据持久化的技巧

      C++——日期类

      Python是如何进行内存管理的?(图文讲解)

      Java基础教程(五千字带你快速入门!)

      C++11新的类功能

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号