广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript中怎么实现属性赋值
  • 575
分享到

JavaScript中怎么实现属性赋值

2024-04-02 19:04:59 575人浏览 安东尼
摘要

这篇文章给大家介绍javascript中怎么实现属性赋值,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。原型链每个对象都有一个包含了一个或者多个对象的原型链,该对象正是这个原型链的起始对

这篇文章给大家介绍javascript中怎么实现属性赋值,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

原型链

每个对象都有一个包含了一个或者多个对象的原型链,该对象正是这个原型链的起始对象.原型链上的所有对象的所有属性都可以被该对象访问到.例如:

> var proto = { foo: 1 };  > var obj = { __proto__: proto, bar: 2 };  > obj.foo  1  > obj.bar  2

我们用到了特殊属性 __proto__  来创建原型链(该属性还没有被所有浏览器广泛支持).对象obj的原型链包含了三个对象:起始处是obj,紧跟着proto,***是Object.prototype. Object.prototype是Object构造函数的原型对象,绝大部分原型链中都包含了它(大部分,但不是全部):

> Object.prototype.isPrototypeOf({})  true > Object.prototype.isPrototypeOf([])  true > Object.prototype.isPrototypeOf(new Date())  true

而且它是原型链的截止对象:

> Object.getPrototypeOf(Object.prototype)  null

普通对象的很多标准方法都是从Object.prototype上继承下来的,比如toString()和hasOwnProperty().

为属性赋值

如果你给一个属性赋值,你通常只能修改原型链上的起始对象(也就是对象自身):如果自身属性已经存在了,则改变这个属性的值,否则,创建这个新的自身属性:

> obj.foo = 3;  > obj.foo  3  > obj.hasOwnProperty("foo")  true > proto.foo  1

这样设计的目的是:一个原型可以为其所有的实例引入了一个公用的初始值(被继承的属性的值).如果给其中一个实例的同名属性执行赋值操作可以改变原型上的那个公用的属性值的话,那么所有实例的初始值都会被改变.为了防止这种情况发生,同时还允许你修改某单个实例的初始值,属性的赋值操作被设计为:仅允许你改变一个已存在的自身属性的值.如果还没有这个自身属性,则会自动创建,再赋值.

访问器和原型链

一个存在于原型链上的访问器属性[3]可以阻止"在该原型链的起始对象上创建同名的自身属性".假如对象obj继承了一个拥有getter和setter的对象:

var obj = {      __proto__: {          get foo() {              return 1;          },          set foo(x) {              console.log("Setter called: "+x);          }      }  };

给对象obj的属性foo赋值的话,会调用到其原型上的setter访问器,而不会给obj创建一个自身属性foo,同理,读取obj的foo属性的话,也会调用到其原型上的getter访问器:

> obj.foo = 2;  Setter called: 2  > obj.foo  1

如果你想禁止该属性的赋值操作的话(也就是只读),可以不提供setter:

var obj = {      __proto__: {          get foo() {              return 1;          }      }  };

这样的赋值操作,在非严格模式下会静默失败,在严格模式下,会抛出异常:

> (function () { "use strict"; obj.foo = 2; }());  TypeError: Cannot set property foo of obj which has only a getter

原型链上的只读属性

如果原型链上的起始对象继承了一个只读属性,则你无法通过赋值操作改变这个属性的值.例如,下面的代码:

var proto = Object.defineProperty({},      "foo",      {          value: 1,          writable: false     });  var obj = { __proto__: proto };

你无法给obj.foo赋值:

> (function () { "use strict"; obj.foo = 2; }());  TypeError: obj.foo is read-only

关于JavaScript中怎么实现属性赋值就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: JavaScript中怎么实现属性赋值

本文链接: https://www.lsjlt.com/news/70086.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中怎么实现属性赋值
    这篇文章给大家介绍JavaScript中怎么实现属性赋值,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。原型链每个对象都有一个包含了一个或者多个对象的原型链,该对象正是这个原型链的起始对...
    99+
    2022-10-19
  • JavaScript中怎么实现解构赋值
    JavaScript中怎么实现解构赋值,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. ES6的新特性  &nbs...
    99+
    2022-10-19
  • java反射给对象属性赋值怎么实现
    Java反射可以通过`java.lang.reflect.Field`类来给对象的属性赋值。以下是一个示例代码: import ja...
    99+
    2023-10-27
    java
  • Vue子组件属性怎么赋值
    这篇文章主要介绍了Vue子组件属性怎么赋值的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue子组件属性怎么赋值文章都会有所收获,下面我们一起来看看吧。Vue 子组件Vue 应用由一个或多个组件构成。Vue 组...
    99+
    2023-07-05
  • html中button标签的onclick属性赋值实现方法
    html中button标签的onclick属性赋值实现方法:1.创建html文件;2.在html文件中添加html架构代码;3.在html架构中的body标签里面使用button标签设置一个按钮并添加onclick属性事件;4.在html架...
    99+
    2022-10-18
  • vue实现动态给data函数中的属性赋值
    目录vue动态给data函数中的属性赋值vue给data中的数据赋值报错问题背景分析解决方案vue动态给data函数中的属性赋值 1.首先创建一个监视器,用来监视相关的属性 2.当这...
    99+
    2022-11-13
  • Vue.js中怎么动态为img的src属性赋值
    这篇文章将为大家详细讲解有关Vue.js中怎么动态为img的src属性赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。需求是这样:ajax获取数据如下{ ...
    99+
    2022-10-19
  • java中怎么用构造方法给属性赋值
    在Java中,可以使用构造方法给属性赋值。构造方法是一个特殊的方法,用于创建对象时初始化对象的属性。构造方法的定义格式如下:```javapublic 类名(参数列表) {// 构造方法的方法体// 给属性赋值的代码}```在构造方法中...
    99+
    2023-08-11
    java
  • java中给实体对象属性的空值赋默认值
    目录给实体对象属性的空值赋默认值给实体类赋默认值通用方法给实体对象属性的空值赋默认值 private final String defaultStr = ""; private fi...
    99+
    2022-11-13
  • java怎么用构造方法给属性赋值
    在Java中,构造方法可以用来给属性赋值。构造方法是一个特殊的方法,它与类名相同,并且没有返回类型(包括void),用来创建对象时初...
    99+
    2023-10-18
    java
  • Spring中如何使用@Value注解实现给Bean属性赋值
    目录属性赋值@Value注解的定义:测试1.在添加了Spring依赖的Maven项目中创建2.在resources目录下创建一个配置文件person.properties3.创建配置...
    99+
    2022-11-12
  • Java循环对bean的属性进行赋值的实现
    项目背景 我们开发过程中会碰到这样一类问题,就是数据层或三方接口返回的Bean对象需要转换重新装换一下我们需要的对象。我们通常的做法就是通过getter/setter方法进行一个一...
    99+
    2022-11-12
  • java在创建对象时怎么给属性赋值
    在Java中,可以通过以下几种方式给对象的属性赋值:1. 使用构造方法:在创建对象时,通过传递参数给构造方法来赋值。例如:javap...
    99+
    2023-10-18
    java
  • java怎么使用反射给对象属性赋值
    本文小编为大家详细介绍“java怎么使用反射给对象属性赋值”,内容详细,步骤清晰,细节处理妥当,希望这篇“java怎么使用反射给对象属性赋值”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言最近项目中遇到一个问题...
    99+
    2023-07-05
  • javascript中怎么实现惰性求值
    这期内容当中小编将会给大家带来有关javascript中怎么实现惰性求值,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 定义如果在一个连续的逻...
    99+
    2022-10-19
  • javascript中基本类型怎么赋值
    这篇文章给大家分享的是有关javascript中基本类型怎么赋值的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、说明当从一个变量到另一个变量赋值的基本类型时,将在该变量上创建一个新值,然后将该值复制到为新变量分...
    99+
    2023-06-15
  • python怎么实现多重赋值
    这篇文章主要为大家展示了“python怎么实现多重赋值”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python怎么实现多重赋值”这篇文章吧。多重赋值你是否曾想...
    99+
    2022-10-19
  • ES6中怎么用解构赋值获取嵌套对象的属性
    小编给大家分享一下ES6中怎么用解构赋值获取嵌套对象的属性,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!用解构赋值获取嵌套对象的...
    99+
    2022-10-19
  • css中圆角属性值怎么实现百分比
    这篇文章主要介绍“css中圆角属性值怎么实现百分比”,在日常操作中,相信很多人在css中圆角属性值怎么实现百分比问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”css中圆角属性...
    99+
    2022-10-19
  • python赋值和交换怎么实现
    本文小编为大家详细介绍“python赋值和交换怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“python赋值和交换怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。赋值原理在赋值的右边形成一个新的元...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作