Prototype属性与Object.defineproperty方法:

文章介绍了JavaScript中的prototype属性如何向对象添加属性和方法,以及如何使用Object.defineProperty动态定义可读写属性,包括getter和setter函数。

prototype 属性允许您向对象添加属性和方法


//prototype 属性允许您向对象添加属性和方法
//注意: Prototype 是全局属性,适用于所有的 Javascript 对象。
//语法   object.prototype.name=value

function employee(name,jobtitle,born){
    this.name=name;
    this.jobtitle=jobtitle;
    this.born=born;
}
var fred=new employee("Fred Flintstone","Caveman",1970);
employee.prototype.salary=null;
fred.salary=20000;
document.write(fred.salary);

//20000

<script type="text/javascript" >
            let number = 18
            let person = {
                name:'张三',
                sex:'男',
            }

            Object.defineProperty(person,'age',{
                // value:18,
                // enumerable:true, //控制属性是否可以枚举,默认值是false
                // writable:true, //控制属性是否可以被修改,默认值是false
                // configurable:true //控制属性是否可以被删除,默认值是false

                //当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
                get(){
                    console.log('有人读取age属性了')
                    return number
                },

                //当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
                set(value){
                    console.log('有人修改了age属性,且值是',value)
                    number = value
                }

            })

            // console.log(Object.keys(person))

            console.log(person)
        </script>

`Uncaught TypeError: key.split(...).at is not a function` 这个错误通常是因为代码运行的 JavaScript 环境不支持 `at()` 方法。`at()` 方法是在 ECMAScript 2022 中引入的,较旧的 JavaScript 引擎可能不支持该方法。以下是几种解决此问题的方法: ### 1. 使用传统的数组索引访问 可以使用传统的数组索引访问来替代 `at()` 方法。`at()` 方法可以用于从数组的开头或结尾访问元素,使用传统索引时,需要注意处理从数组末尾访问元素的情况。 例如,将 `key.split(...).at(-1)` 替换为 `key.split(...)[key.split(...).length - 1]`。 ```javascript // 假设原始代码是这样 // const lastElement = key.split(',').at(-1); // 替换为 const parts = key.split(','); const lastElement = parts[parts.length - 1]; ``` ### 2. 升级 JavaScript 运行环境 如果是在 Node.js 环境中运行代码,可以尝试升级 Node.js 到支持 `at()` 方法的版本。Node.js 16 及以上版本支持该方法。 ### 3. 引入 polyfill 如果无法升级运行环境,可以引入一个 polyfill 来支持 `at()` 方法。可以在项目中添加以下代码: ```javascript if (!Array.prototype.at) { Object.defineProperty(Array.prototype, 'at', { value: function (n) { // ToInteger() abstract op n = Math.trunc(n) || 0; // Allow negative indexing from the end if (n < 0) n += this.length; // OOB access is guaranteed to return undefined if (n < 0 || n >= this.length) return undefined; // Otherwise, this is just normal property access return this[n]; }, writable: true, enumerable: false, configurable: true }); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值