javascript中的基本类型与引用类型

引发我对于javascript中的基本类型与引用类型的思考是这么一个场景。我在一个类中,我想要将构造函数中传递进来的map作为一个属性,然后获得一个独立的this.map,但是我失败了。先看看我的代码是长什么样的吧。

function MapControler(map) {
    this.map = map;
}

MapControler.prototype = {
    constructor: MapControler,
    modifyPos: function(lonlat) {
        this.map.lonlat = lonlat;
        console.log(this);//MapControler
    }
}

var map = {
    lonlat: '118.42, 22.11'
}
console.log(map.lonlat)//'118.42, 22.11'

var mapControler = new MapControler(map);
mapControler.modifyPos('119.42, 22.27');

console.log(map.lonlat)//'119.42, 22.27'
console.log(mapControler.map.lonlat)//'119.42, 22.27'

为什么会这样子呢?这是因为在javascript的对象引用机制中有这么一条:对象不会被复制,只能通过引用来传递。
后来查了下书,原来是javascript中分为基本类型与引用类型值两种。基本类型值指的是简单的数据段(Undefined/Null/Boolean/Number/String),引用类型值指的是那些可能由多个值构成的对象(Array/Object/Date/RegExp/Function)。
两种类型之间有两个比较明显的区别:动态的属性与复制变量值。

动态属性

引用类型的动态属性是可以访问的,而基本类型是不可以访问的。

var person = {};
person.name = 'Steve Zheng';
console.log(person.name);//'Steve Zheng'

var person = '';
person.name = 'Steve Zheng';
console.log(person.name);//Undefined

复制变量值

基本类型的值在复制过程中,会创建出一个新的值;而引用类型却不会创建新的值,而是指向那个引用值上。

//基本类型
var num1 = 5;
var num2 = num1;
console.log(num1);//5
console.log(num2);//5

num2 = 10;
console.log(num1);//5
console.log(num2);//10

//引用类型
var person1 = {name: 'Steve Zheng'};
var person2 = person1;
console.log(person1.name);//'Steve Zheng'
console.log(person2.name);//'Steve Zheng'

person2.name = 'Yi Zheng';
console.log(person1.name);//'Yi Zheng'
console.log(person2.name);//'Yi Zheng'
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇