gpt4 book ai didi

Javascript 变量 - Getter 问题

转载 作者:行者123 更新时间:2023-11-30 07:26:46 25 4
gpt4 key购买 nike

我想到了以下情况:

function Dog () {
"use strict";
this.age = 1;
var name = "Fido";
this.getName = function () { return name; }
}

现在我正在创建“Dog”类的新实例并打印变量的值。

var d = new Dog;
document.write('<strong>Dog age:</strong> ' +d.age); \\Outputs "1" as expected
document.write('<br/>');
document.write('<strong>Dog name:</strong> ' +d.name); \\Outputs "undefined" as expected, 'cause it's a private variable.
document.write('<br/>');
document.write('<strong>Get Dog name:</strong> ' +d.getName()); \\Outputs "Fido", as expected.

但假设我想更改 Dog 的名称,如下所示:

d.name = "Stinky";
document.write('<br/>');
document.write('<strong>Dog name Again:</strong> ' +d.name);
document.write('<br/>');
document.write('<strong>Get Dog name Again:</strong> ' +d.getName());

基于此,我有几个问题:

  1. 到底为什么“d.name”没有向我显示“undefined”? “名字”不是私有(private)变量吗?我想您不能更改私有(private)变量值,对吗?我想知道这个过程是否创建了一个新变量,但这次是一个公共(public)变量,并且具有相同的名称。如果是这样,有没有办法在我每次尝试分配同名的新属性时阻止创建新变量?有没有办法抛出“类型错误”或其他东西(好吧,这正是我所期望的)。
  2. 最后:为什么“getName”打印原始值“Fido”,即使在我为它分配了一个新值之后?

有什么想法吗?

这里有一个 fid 可以让事情变得更简单。

http://fiddle.jshell.net/yZpfg/2/

最佳答案

d.name = "Stinky"; 正在向 d 对象添加一个新的(公共(public))属性,它是一个 instanceOf Dog.

getter 仍然引用值为 Fido 的(私有(private))变量。

如果你想让消费者改变一个私有(private)变量,你还需要一个setter:

function Dog () {
"use strict";
this.age = 1;
var name = "Fido";
this.getName = function () { return name; }
this.setName = function (value) { name = value; }
}

var d = new Dog();
d.name; // undefined because there is no name public property
d.getName() // returns the internal private, "Fido"
d.setName('Stinky'); // the internal private is now "Stinky"

关于Javascript 变量 - Getter 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11636431/

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