一、属性放在构造函数里方法放在原型上
//构造函数
function Person(name, age) {
this.name = name
this.age = age
}
// 原型模式
Person.prototype.fn = function(name) {
console.log(name)
}
var p1 = new Person('Mrs陈', 23)
console.log(p1) //Person {name: "Mrs陈", age: 23}
p1.fn('卡卡') //卡卡
console.log(p1.constructor) //结果是构造函数
// 数组怎么来的呢
//创建数组
var arr = new Array() //var p1 = new Person('Mrs陈', 23) 很像吧
console.log(arr) //[]
console.log(Array.prototype) //会出现很多原型上的方法
// 数组也是构造函数创建出来的
// 怎么样在原型上扩展方法呢
// 这里举个例子 indexof 在IE8以下是不兼容的,这是我们就可以重写这个方法
Array.prototype.indexOf = function(item, index) {
//先判断你传index了没有
var index = typeof(index) == 'undefined' ? '0' : index
for (var i = 0; i < this.length; i++) {
if (this[i] == item) {
return i //返回下标
}
}
// 循环结束之后如果没有找到 返回-1
return -1
}
var arr1 = [2, 35, 6, 7, 57, 9]
console.log(arr1.indexOf(35)) //1 可以测试IE低版本
console.log(arr1.indexOf(3)) //1 可以测试IE低版本
// 讲一下各个类型的原型
// string String.prototype
// number Number.prototype
// boolean Boolean.prototype
// arr Array.prototype
// obj Object.prototype
// re RegExp.prototype
// error Error.prototype
// function Function.prototype