关于JavaScript函数
object.defineProperty()函数
再学习这个函数之前,我们先创建一个object对象
var person = {}
person.name = "junlebao"
person.age = 17
person.isAdult = "未成年"
这样我们创建对象完成之后,我们在思考几个问题
现在我有几个要求:
要求1: 我们的age属性代表年龄,总不能是个负数吧,首先age应该有一个限制.
要求2: 我们的isAdult是随着age的不同,所显示的转态也不同.
显然,上述的方法创建的对象,无法满足我们这些要求.
这时候,我们的object.defineProperty()函数就派上了用场,我们就先上代码
注意:以下代码中,在对象的定义中,写的是带下划线的:_age,
而在defineProperty()函数里写的属性名是不带下划线的:age,
外部使用该对象的属性时,用不带下划线的:
var person = {
_age: 16,
isAdult: "未成年"
}
Object.defineProperty(person, 'age', {
get: function () { //读取时用到的函数
return this._age
},
set: function (newValue) { //设置属性值的时候用到的函数
if (newValue > 0 && newValue <= 150) { //对年龄一个限制,在(0,150]之间
this._age = newValue
if (this._age >= 18) {
this.isAdult = "已成年"
}
}
}
})
person.age = 12 //调用set函数
console.log(person.age); //调用get函数
console.log(person.isAdult); //未成年
person.age = 25 //调用set函数
console.log(person.age); //调用get函数
console.log(person.isAdult); //已成年
运行结果如下:

Object.defineProperty()的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性。
Object.defineProperty()函数的格式:
Object.defineProperty(obj, prop, desc)
参数:
Obj:表示增加属性的对象 (必需)
Prop:属性名 (必需)
Desc:描述属性的一个集合 (必需)
数据描述符: 拥有可写或不可写值的属性*
value : 属性的值,可以为任意类型 默认为undefined
wriable: 属性的值是否可以被修改 为true(默认值)可以被修改 为false 不可以被修改
存取描述符:由一对getter-setter函数功能来描述的属性*
get:在读取属性时调用的函数,默认值为undefined。
set:在写入属性时调用的函数,默认值为undefined。
下面两个是公有的属性
enumerable: 此属性是否可以被枚举(使用for...in或Object.keys())。设置为true可以被枚举;设置为false,不能被枚举。默认为false。
configurable: 是否可以删除目标属性或是否可以再次修改属性的特性(writable, configurable, enumerable)。设置为true可以被删除或可以重新设置特性;设置为false,不能被可
以被删除或不可以重新设置特性。默认为false。有两个作用: 目标属性是否可以使用delete删除,目标属性是否可以再次设置特性.
提示:一旦使用Object.defineProperty给对象添加属性,那么如果不设置属性的特性,那么configurable、enumerable、writable这些值都为默认的false.
关于JavaScript函数的更多相关文章
- ABP(现代ASP.NET样板开发框架)系列之21、ABP展现层——Javascript函数库
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之21.ABP展现层——Javascript函数库 ABP是“ASP.NET Boilerplate Project ...
- JavaScript权威设计--JavaScript函数(简要学习笔记十一)
1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...
- JavaScript 函数
JavaScript 函数 介绍:函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块.嗯,就像Java中封装的方法一样. 将脚本编写为函数,就可以避免页面载入时执行该脚本. 函数包含着一些代码 ...
- javascript 函数初探 (一)--- 神马是函数
神马是函数? 所谓函数,本质上是一种代码的分组形式.我们可以通过这种形式赋予某组代码一个名字,以便与之后的调用.下面,我们来示范以下函数的声明: function sum(a, b){ var c = ...
- JavaScript函数的概念
函数是这样的一段代码,它只定义一次,但可能被执行或调用任意多次. JavaScript函数是参数化的:函数的定义会包含形参,这些参数在函数的整体中像局部变量一样工作.函数调用时会为形参提供实参的值.除 ...
- Javascript函数重载,存在呢—还是存在呢?
1.What's is 函数重载? );//Here is int 10 print("ten");//Here is string ten } 可以发现在C++中会根据参数的类型 ...
- JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别
函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...
- javascript 函数重载 overloading
函数重载 https://en.wikipedia.org/wiki/Function_overloading In some programming languages, function over ...
- JavaScript语言精粹读书笔记 - JavaScript函数
JavaScript是披着C族语言外衣的LISP,除了词法上与C族语言相似以外,其他几乎没有相似之处. JavaScript 函数: 函数包含一组语句,他们是JavaScript的基础模块单元,用于代 ...
- 常见的JavaScript函数
JavaScript函数一共可分为5类:常规函数.数组函数.日期函数.数学函数和字符串函数. (1)常规函数(9个) alert函数:显示一个警告对话框,包括一个“确定”按钮. confirm函数:显 ...
随机推荐
- Java实现 蓝桥杯VIP 算法训练 求指数
问题描述 已知n和m,打印n1,n2,-,nm.要求用静态变量实现.nm表示n的m次方.已知n和m,打印n1,n2,-,nm.要求用静态变量实现.nm表示n的m次方.(每行显示5个数,每个数宽为12, ...
- Java实现蓝桥杯VIP算法训练 石子游戏
试题 算法训练 石子游戏 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 石子游戏的规则如下: 地上有n堆石子,每次操作可选取两堆石子(石子个数分别为x和y)并将它们合并,操作的得分 ...
- Java实现 LeetCode 130 被围绕的区域
130. 被围绕的区域 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O). 找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充. 示例: X X X X X O O ...
- java实现第三届蓝桥杯提取子串
提取子串 [代码填空](满分16分) 串"abcba"以字母"c"为中心左右对称:串"abba" 是另一种模式的左右对称.这两种情况我们都称 ...
- hackrf 输出功率测试
使用PortaPack H1的话筒发射功能测试: 144M :8dbm 430M:6dbm 950M:6dbm 1545.42M:0.5dbm 7.42M:18.5dbm 14.2M:16.3dbm
- (一)SQL注入漏洞测试的方式总结
一.工具注入 1.SQLMap的作用 判断可注入的参数 判断可以用那种SQL注入技术来注入 识别出哪种数据库 根据用户选择,读取哪些数据(库.表.列.字段值...) 2.注入技术 [A]基于布尔的盲注 ...
- chrome浏览器版本与驱动不匹配问题的解决办法
1.浏览器与驱动如何匹配才不会报错 使用selenium模块的webdriver打开谷歌浏览器时常遇到这样的错误提示: selenium.common.exceptions.WebDriverExce ...
- layui导出表格的两种方法
一.不熟悉layui小白使用方法 1.引入如下js文件: 2.编写如下函数: 3.表格ID要与函数取值保持一致即可,再就是自定义一个按钮触发事件 二.引入插件使用方法 1.layui官网下载插件包: ...
- Codeforces Round #561 (Div. 2) A Tale of Two Lands 【二分】
A Tale of Two Lands 题目链接(点击) The legend of the foundation of Vectorland talks of two integers xx and ...
- (六)TestNg中的软断言和硬断言
原文链接:https://cloud.tencent.com/developer/article/1479172 前言 在执行自动化测试脚本的时候,我们需要自动判断测试脚本执行完成后的实际结果是否与预 ...