Javascript原型继承

时间:2013-04-02 13:28:11

标签: javascript

我想知道为什么子范围在使用像字符串这样的文字类型时创建一个新属性,并且当使用对象符号时它不会创建一个新对象,下面的例子将澄清

paretscope.aString = 'parent string'

//now initialize a string in child scope so it will create a new property in child scope
childScope.aString = 'child string'

paretscope.model={key:"abc"}

// now i modify an object property in child scope but it will not create
// a new object in child scope instead it will modify object in parent scope

childscope.model.key ="xyz"

1 个答案:

答案 0 :(得分:3)

该问题与原始值或对象/数组无关。这是如何确切地访问/修改属性 [1]

childScope.aString = 'child string'

为属性aString分配新值。这将创建 childScope元素上的属性(如果它尚不存在)。 childScope是否具有带有该名称的继承的属性并不重要,当您执行赋值时,始终会在对象本身上创建该属性。

childScope.model.key ="xyz"

为该属性分配新值,您要为该值本身添加一个属性,这是完全不同的。

字符串赋值的等效过程是将新对象分配给model属性。

childScope.model = {key:"xyz"}

1:虽然它与可变和不可变数据类型有点相关。 JavaScript中的所有原始值都是不可变的,即要修改值,您必须创建一个新值。数组和对象是可变的,因此您可以添加元素/属性,而无需创建新的数组或对象。

因此,不可变数据类型的值强制您可以为属性/变量分配新值,而可变数据类型的值可以在适当位置进行修改。