您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么不能在javascript中将属性添加到字符串对象?

为什么不能在javascript中将属性添加到字符串对象?

JavaScript有6种语言类型:

基本类型的值称为基本值,并且它们不能具有属性。 所述的值 对象 非原始型被称为对象的它们可具有的特性。

当您尝试将名为的属性分配给'bar'变量时foo,如下所示:

foo.bar = 'abc';

那么结果将取决于以下值的类型foo

如果的值属于 UndefinedNullfoo类型,则将引发错误, ____

如果的值属于 Objectfoo类型,则将在对象上定义一个命名属性(如果需要),并将其值设置为, __'bar'``foo``'abc'

如果的值fooNumberStringBoolean 类型,则该变量foo将不会以任何方式更改。在这种情况下,上述分配操作将为noop。

因此,如您所见,仅在变量是对象的情况下,才将属性分配给变量。如果不是这种情况,则分配将根本不执行任何操作,甚至抛出错误

在您的情况下,该变量test包含 String 类型的值,因此:

test.test = "test inner";

什么也没做。

但是,由于ES5引入了访问器属性,所以我上面已经说过了。访问器属性使我们可以定义在检索或设置属性时将调用函数

例如:

var str = '';
str.prop;

str一个保存 字符串值的变量。因此,访问该变量的属性应该是no-op(str.prop仅返回undefined)。唯一的例外是这样:如果String.prototype包含'prop'具有定义的getter的accessor属性,则将调用该getter。

因此,如果已定义:

Object.defineProperty( String.prototype, 'prop', {
    get: function () {
        // this function is the getter
    }
});

然后这个

str.prop;

调用该getter函数

但是,我认为向内置原型添加访问器属性不是一个好习惯。

javascript 2022/1/1 18:20:40 有408人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶