JavaScript设想形式浏览
更多文章检察本专栏
第二章:类
1、闭包完成类
闭包能够理解为’类生成器’
闭包代码:
var Book = (function(){
var bookNum = 0;
function checkBook(name){
}
return function(newId,newName,newPrice){
var name,price;
this.id = newId;
bookNum++;
if(bookNum > 100){
throw new Error('最多只出书100本书');
}
function checkID(id){}
this.getName = function(){
console.log(name);
return name;
};
this.getPrice = function(){
console.log(price);
return price;
};
this.setName = function (mName) {
name = mName;
};
this.setPrice = function (mPrice) {
price = mPrice;
};
this.copy = function () {};
// 组织器
this.setName(newName);
this.setPrice(newPrice);
}
})();
Book.prototype = {
isJSBook: false,
display: function () {
}
}
运用:
var myBook = new Book('id','name','price');
运用方法与一般的是一致的。
然则假如不加new关键词的话
var myBook = Book('id','name','price');
当不运用new关键词的时刻只会将Book实行一遍而且this指针为window
而且一切的值都在
能够运用将return的function写为一个私有的类,而且将外部的prototype写在内里,让闭包看起来越发的惬意,更像是一个团体。
2、对象的平安形式
在运用类的时刻可能会遗忘运用new关键词。这个时刻挪用就像上面说的那种。实行一遍代码,而且个中的this指向window。
能够运用平安形式防止遗忘运用new的状况。
列子:
var Book = function (title,time,type) {
if(this instanceof Book){
this.title = title;
this.time = time;
this.type = type;
}else{
return new Book(title,time,type);
}
}
实质能够看出就是加了一层推断。
3、js原型链对援用范例的无力。
当原型链上的值为援用的时刻:
var test = function () {
}
test.prototype.nums = [1,2,3,4];
ins1 = new test();
ins2 = new test();
console.log(ins2.nums);
ins1.nums.push(5);
console.log(ins2.nums);
这里就能够看出来假如原型链上的值为援用范例的时刻会出现题目。
4、多继续
多继续的完成就是将父类们的一切属性举行拷贝到一个到当前类上。
当碰到援用范例的时刻应该深拷贝,然则此处我们只议论浅拷贝的题目。
以下代码为多继续:
var mix = function () {
var len = arguments.length;
var target = arguments[1];
var arg;
for(var i = 1;i < len;i++){
arg = arguments[i];
for(var property in arg){
target[property] = arg[property];
}
}
return arg;
}
5、多态
多态是对arguments内里的值得个数举行统计,依据差别的状况赋予差别的回应。
简朴例子
var add = function () {
var len = arguments.length;
switch (len) {
case 0:
return 10;
case 1:
return 10 + arguments[0];
case 2:
return arguments[0] + arguments[1];
}
}