秉着学习、交流、思考、总结的态度,和你们分享这段时间经过阅读js高级程序设计,发现的一些小细节,小知识点,一块儿交流,一块儿进步!查漏补缺ing...javascript
var obj = new Object("some texrt");
console.log(obj instanceof Number); //输出 false
console.log(obj instanceof String); //输出 true
复制代码
原理
:instanceof是根据引用数据类型的prototype来判断真实的数据类型。复制变量值问题前端
var num = 2;
var num1 = num; // 此时 num1 = 2 复制了num
var num1 = 3; //此时num1 = 3,num依然为2
复制代码
var obj1 = new Object()
var obj2 = obj1;
obj1.name = "MG";
alert(obj2.name); //此时obj2.name = MG
复制代码
变量对象的指向: obj1建立了一个对象新实例,而后复制给了obj2。此时他们指向的都是堆内存中的同一个对象;当obj1添加name属性以后,obj2来访问这个属性,此时他们访问的都是存储在这个堆内存中的一个对象。java
声明变量算法
function add(num1,num2){
var sum = num1+num2;
return sum;
}
var result = add(10,20);
alert(sum); // sum is not defined---(var声明在了局部环境,全局没法访问到)
复制代码
function add(num1,num2){
sum = num1 + num2;
return sum
}
var result = add(10,20)
alert(sum); // 30
复制代码
var: var声明变量会自动被添加到最接近的环境中;在函数内部最接近的环境就是函数的局部环境;若是初始化变量时(代码块2所示),没有使用var关键字,因此sum属于全局环境,那么当add()执行完毕以后,sum也能够被访问到。设计模式
垃圾收集机制函数
标记清除
是主流的垃圾收集算法。另一种是引用计数
算法。工厂模式学习
function creatPerson(name,age,job){
var o = new Object(); // 新建一个函数
o.name = name;
o.age = age;
o.job = job;
o.sayName = function (){
alert (this.name);
};
return o;
}
var person1 = creatPerson("mangguo",21,"fe");
var person2 = creatPerson("MG",21,"前端");
复制代码
构造函数模式ui
首字母
要使用大写
;function Person(name,age,job){
var o = new Object(); // 新建一个函数
o.name = name;
o.age = age;
o.job = job;
o.sayName = function (){
alert (this.name);
};
}
var person1 = new creatPerson("mangguo",21,"fe");
var person2 = new creatPerson("MG",21,"前端");
复制代码
小伙伴们能够根据这些实例,本身总结一下上边的这两种模式还有什么不同的地方,进一步巩固哦!this
原型模式spa
prototype
;function Person(){}
Person.prototype = {
name :"MG",
adress :"beijing",
sayName :(()=>{
console.log(this.name);
})
}
var person1 = new Person();
var person2 = new Person();
console.log(person1.hasOwnProperty("name")); // 输出 false
console.log("name" in person1); // 输出 true
person1.name = "mangguo"
console.log(person1.hasOwnProperty("name")); // 输出 true
console.log("name" in person1); // 输出 true
复制代码
构造函数和原型混成的模式
function Person(name,age,job){
var o = new Object(); // 新建一个函数
o.name = name;
o.age = age;
o.job = job;
this.friends = ["Mar","Court"];
}
Person.prototype = {
constructor:Person, // 这里是声明全部实例的共享属性,constructor'
sayName:function(){
alert(this.name);
}
}
var person1 = new creatPerson("mangguo",21,"fe");
var person2 = new creatPerson("MG",21,"前端");
person1.friends.push("Van");
console.log(person1.friends); // 输出 "Mar, Court, Van"
console.log(person2.friends); // 输出 "Mar, Court" ,能够看出修改person1的修改并不会影响到person2
console.log(person1.friends === person2.friends); // 输出 false
console.log(person1.sayName === person2.sayName); // 输出 true
复制代码
除了以上几种模式还有
动态原型模式
、寄生构造函数模式
和稳妥构造函数模式
,但因为这些都不太经常使用,因此就不介绍了,有兴趣的小伙伴能够参考js红宝书第六章,里边介绍的很详细哦!
这些是在阅读红宝书的过程当中,发现的一些小细节,或许还不够深刻,须要小伙伴们一块儿多积累多练习,你们一块儿学,一块儿交流进步才会更快哦,一块儿加油!持续更新中~