学习内容:
一、OOP:
1.OOP的语法
语法:
1).new Object()
var obj=new Object();
obj.sum=function(a,b,d){
// this指向函数的拥有者
return a+b+c+this.ns;
}
2).JSON
var xyj = {
description: "人与自然",
sale: function (price) {
console.log(price)
},
author: "施耐庵"
}
3).工厂模式
function createBook(author, price, type) {
return {
author: author,
price: price,
type: type
}
}
var b = createBook("我替你记得", 25, "散文");
4).构造函数:
(1).构造函数:开辟内存空间
析构函数:释放内存空间
注:不要把函数或公共资源写在构造函数里,容易造成内存的浪费
公共资源写在原型中
原型需要使用构造函数的名字来调用
原型是一块独立的内存空间,本质是个对象
面试题:
构造函数主要通过call( )或者apply( )实现
工作原理:改变this指向
Call( this,参数1,参数2……)
Apply( this,[参数列表])
(2)OOP的思想
OOP: 提升效率
(3)三大特征:封装 继承 多态
二、原型的继承
1.这是个浅拷贝,不要这样写
Eg: Dog.prototype=Animal.prototype;
需要用深拷贝来完成继承
如何实现一个深拷贝:
1).for in (递归)
For in 只能对第一层深拷贝,如果里面的数据是引用数据类型,就是浅拷贝了
Eg: for (x in Animal.prototype) {
Dog.prototype[x] = Animal.prototype[x]
}
2).JSON
Dog.prototype=JSON.parse(JSON.stringify)
2.继承补充内容:
1).数组去重
Array.prototype.SingleArr = function () {
var newArr = [];
this.forEach(function (item) {
newArr.indexOf(item) === -1 ?
newArr.push(item) : null;
})
return newArr;
}
2).反转字符串
function reverseString(str) {
return str.split('').reverse().join('')
}
String.prototype.reverseStr = function () {
return this.split('').reverse().join('')
}
3).一个数字的n次方
function fang(n, m) {
return
}
var a = n ** m; //n的m次方