对于一个程序员来说,前三年还是要把基础打牢,最近在看《js权威指南这本书》看了对象这一部分,做了一下总结:
首先上一张思维导图:
常见的面试题:
1.对象的复制(深拷贝和浅拷贝)
//基本类型 Number String Boleen 按值传递 改a不会改b
var a = 25;
var b = a;
b = 18;
console.log(a,b);
//对象是按引用传值
var obj1= {a:1,b:2,c:3};
var obj2= obj1;
obj2.b = 10;
console.log(obj2,obj1);
//浅拷贝复制只想某一个对像的指针,深拷贝会创造一个一模一样的对象
//深拷贝实现的方法
var obj1 = {a:10,b:20,c:30};
//手动复制
var obj2 = {a:obj1.a,b:obj1.b,c:obj1.c}
//转成JSON再转回来
var obj1 = {body:{a:10}};
var obj2 = JSON.parse(JSON.stringify(obj1));
//使用jquery的$.extend
var $ = require('jquery');
var obj1 = {
a:1,
b:{f:{g:1}},
c:[1,2,3]
}
var obj2= $.extend(true,{},obj1);
//利用lodash库
//_.cloneDeep
function deepCoby (obj) {
if (null == obj || "object" != typeof obj) //网上抄个深拷贝
return obj;
if (obj instanceof Date) {
var copy = new Date();
copy.setTime(obj.getTime());
return copy;
}
if (obj instanceof Array) {
var copy = [];
for (var i = 0, len = obj.length; i < len; ++i) {
copy[i] = this.deepCoby(obj[i]);
}
return copy;
}
if (obj instanceof Object) {
var copy = {};
for (var attr in obj) {
if (obj.hasOwnProperty(attr)) copy[attr] = this.deepCoby(obj[attr]);
}
return copy;
}
}
2.对象的创建的几种方式:
//1.Object构造函数模式
var person = new Object();
person.name = 'liming'
person.sayHi = function(){
return this.name
}
//2.对象字面量的形式
var person = {
name:'liming',
sayHi:function(){
return this.name
}
}
//3.工厂模式
function createPerson(name,age){
var obj = new Object();
obj.name = name;
obj.age = age;
return obj;
}
//4.构造函数模式
function person(name,age){
this.name = name;
this.age = age;
}
var person1 = new Person('liming',29);
//5.原型模式
function person(){ }
person.prototype.name = 'liming';
var person1 = new person();
person1.name;//liming
//这个原型中的属性是被很多实例所共享的
//6.组合使用构造函数和原型模式
function person(name,age){
this.name = name;
this.age = age;
}
person.prototype = {
constructor:person,
sayHi:function(){
alert(this.name)
}
}
3.原型和原型链之间的一些关系:
这个推荐一篇博客吧:
https://www.cnblogs.com/shuiyi/p/5305435.html