gpt4 book ai didi

javascript - 什么类型的对象/属性是原型(prototype) getter 和 setter?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:47:24 25 4
gpt4 key购买 nike

阅读 John Resig's article about Javascript getters and setters我在 Javascript 中看到一个我不熟悉的结构:

Field.prototype = {
get value(){
return this._value;
},
set value(val){
this._value = val;
}
};

Prototype 和许多其他对象一样是一个对象,但这里的 get 和 set 部分似乎不熟悉。他们用什么名字来称呼?它们看起来不像对象的典型属性(遵循 "key":"value" 语法),而且它们看起来也不像标准函数。

这只是 JS 引擎将其转换为更易识别的语法糖吗?

更新:

我的问题的真正症结在于:由于 { foo(){} } 不是有效的语法,是什么让它在给定 get 的情况下有效设置运算符? { 获取 foo(){} }

最佳答案

我花了一点时间阅读才弄清楚这可能是如何使用的,所以虽然@RGraham 已经指出了很多文档(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/get),但我想我会提供一个用法示例。

基本上,“get”和“set”运算符允许您覆盖直接访问成员变量时的行为。

这意味着您可以,例如:

  • 用一个名字公开呈现一个成员变量,然后用另一个名字私下存储它。
  • 在存储之前对值执行操作。
  • 呈现一些看似成员变量但实际上是函数的东西。

以上所有内容(当然)都可以通过在对象上定义函数来完成,不同之处在于必须这样调用函数。

使用这种表示法,即使该表示法看起来是在引用一个成员变量,函数也会被调用。

我个人不喜欢它 - 我想它会导致一些非常困惑的代码,尤其是在调试时。但是如果你想……就可以使用它……

例子

var Field = {
get value(){
return this._value;
},
set value(val){
this._value = val + 1;
}
};

Field.value = 100

console.log( Field.value );

将输出:

101

在这里 fiddle :http://jsfiddle.net/zV8Kf/1/

关于特定的“为什么 { get foo(){} } 有效?”问题:

我是这样读的:

  • 创建对象
  • 定义一个什么都不做的函数
  • 分配函数,使其成为“foo”的 getter

这意味着对该对象的 foo 引用将返回 undefined

你可以在这里看到行为:

http://jsfiddle.net/VHAhA/

如果您认为 get 近似于 foo: function(我知道这不完全是,但它确实声明“我要定义一个函数 - 赋值it to this",那么它在语法上类似于:

{ foo: function foo() {} }

它不能与 { foo(){} } 相提并论,因为在此示例中,您不会告诉 JavaScript 您将要定义某些东西,也不会告诉 JavaScript 一旦您定义了某些东西就把它放在哪里做。

关于javascript - 什么类型的对象/属性是原型(prototype) getter 和 setter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20518278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com