js进阶学习

这种写法不可取:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var googleMap = { 
show: function(){
console.log( '开始渲染谷歌地图' );
}
};
var renderMap = function(){ googleMap.show();
};
renderMap();
//要新增类型后:
var googleMap = {
show: function () {
console.log('开始渲染谷歌地图');
}
};
var baiduMap = {
show: function () {
console.log('开始渲染百度地图');
}
};
var renderMap = function (type) {
if (type === 'google') {
googleMap.show();
} else if (type === 'baidu') {
baiduMap.show();
}
};
renderMap('google'); // 输出:开始渲染谷歌地图 renderMap( 'baidu' ); // 输出:开始渲染百度地图

利用多态性,优化代码结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var googleMap = {
show: function () {
console.log('开始渲染谷歌地图');
}
};
var renderMap = function (map) {
if (map.show instanceof Function) {
map.show();
}
};
renderMap(googleMap); // 输出:开始渲染谷歌地图 renderMap( baiduMap ); // 输出:开始渲染百度地图
var sosoMap = {
show: function () {
console.log('开始渲染搜搜地图');
}
}
renderMap (sosoMap); // 输出:开始渲染搜搜地图

原型:
obj.__proto__ === Constructor.prototype
在 JavaScript 中,每个对象都是从 Object.prototype 对象克隆而来的

原型继承:

1
2
3
4
5
6
7
8
9
10
11
12
var obj = { name: 'sven' };
var A = function(){}; A.prototype = obj;
var a = new A();
console.log(a.name); // 输出:sven

//相似的:
var A = function () { };
A.prototype = { name: 'sven' };
var B = function () { };
B.prototype = new A();
var b = new B();
console.log(b.name); // 输出:sven

创建没有原型的对象: Object.create( null )