#JS面向对象及组件开发
![](https://box.kancloud.cn/6eea0c3b585cd55786cecf3ae6c1f4b3_1096x633.png)
###JS是基于原型的程序
自定义arr的push方法
```
<script>
var arr = [1,2,3];
Array.prototype.push = function(){
for(var i=0; i<arguments.length; i++){
this[this.length] = arguments[i];
}
return this.length;
};
arr.push(4,5,6);
alert(arr);
</script>
```
###什么是包装对象
```
var str = 'hello';
alert(typeof str); // string
alert(str.charAt(0)); // h
alert(str.length); // 5
```
为什么基本类型也有属性和方法?
这是因为有的基本类型拥有自己对应的包装对象,像上面的字符串类型对应的包装对象就是 String
```
var hello = new String('hello');
alert(typeof hello); // object
alert(hello.charAt(0)); // h
// String.prototype.charAt = function(){};
```
再来看看下面发生了什么
```
var str = 'hello'; // 这里str确实是一个字符串类型
str.charAt(0); // 但是在这里,基本类型就会找到对应的包装对象类型,然后包装对象把所有的属性和方法给了基本类型,然后包装对象消失
```
给基本类型添加一个方法
```
var str = 'hello';
String.prototype.lastValue = function(){
return this.charAt(this.length - 1);
};
alert(str.lastValue()); // o
```
一个小题目
```
var str = 'hello';
str.number = 10;
alert(str.number); // undefined
```
###面向对象中的原型链
实例对象与原型之间的连接,叫做原型链
```
function Fun(){
}
Fun.prototype.num = 10;
var f1 = new Fun();
alert(f1.num); // 10
```
思考为什么打印出来的是20
```
function Fun(){
this.num = 20;
}
Fun.prototype.num = 10;
var f1 = new Fun();
// 通过console.log(f1) 可以查看原型链
console.log(f1);
alert(f1.num); // 20
```
查看原型链
![](https://box.kancloud.cn/f6eb01dede6993e1581ea376b98a4ea3_1919x1079.png)
原型链的最外层: Object.prototype
```
function Fun(){
}
Object.prototype.num = 30;
var f1 = new Fun();
alert(f1.num); // 30
```
```
function Fun(){
this.num = 20;
}
Fun.prototype.num = 10;
Object.prototype.num = 30;
var f1 = new Fun();
alert(f1.num); // 20
```
![](https://box.kancloud.cn/967c0cb8ee9a526d3fdd9ed8b1525bf6_1436x804.png)
- 01 JS面向对象及组件开发
- 02 传统的过程式编写选项卡
- 03 用面向对象封装通用选项卡
- 04 控制多个选项卡自动播放
- 05 用面向对象编写拖拽
- 06 JS面向对象及组件开发
- 07 hasOwnProperty和constructor的使用
- 08 instanceof运算符的使用
- 09 利用toString做类型判断
- 10 什么是面向对象的继承
- 11 面向对象之拷贝继承
- 12 编写继承的拖拽
- 13 继承的其他形式之类式继承
- 14 继承的其他形式之原型继承
- 15 组件开发是什么
- 16 给拖拽组件配置不同参数
- 17 封装弹框组件
- 18 使用对象标记已弹出弹框
- 19 复杂组件开发之自定义事件
- 20 原生JS实现自定义事件
- 21 自定义事件实例
- 22 基于JQ的选项卡组件开发