您的位置:首页 > Web前端 > JavaScript

javascript 对象封装的常用方式

2018-03-22 17:38 253 查看
常规封装function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}

Person.prototype = {
constructor: Person,
sayHello: function () {
console.log('hello');
}
}
var b = new Person('张三', 12, '女');
b.sayHello();将初始化内容放函数中function Person(info) {
this._init_(info);
}

Person.prototype = {
constructor: Person,
_init_:function(info){
this.name = info.name;
this.age = info.age;
this.sex = info.sex;
},
sayHello: function () {
console.log(this.name);
}
}
var info = {
name:'张三',
age:'12',
sex:'女'
}
var b = new Person(info);
b.sayHello();//张三new改造
function Person(info) {
this._init_(info);
}
Person.prototype =  {
constructor : Person,
_init_ : function(info) {
this.name = info.name;
this.age = info.age;
this.sex = info.sex;
},
sayHello:function(){
console.log( this.name );
}

}
var myNew = function(constructor, args) {
var o = {};
o.__proto__ = constructor.prototype; //构造函数的原型属性prototype赋值给o 的原型对象__proto__
var res = constructor.call(o, args);//以o为上下文调用函数,同时将参数作为数组传递
var type = typeof res;//如果在构造函数中,return 复合类型,包括对象,函数,和正则表达式,那么就会直接返回这个对象,否则,返回 o
if (['string', 'number', 'boolean', 'null', 'undefined'].indexOf(type) !== -1) {
return o;
}
return res;
}
var info = {
name:'张三',
age:12
}
var b = myNew(Person,info);
console.log(b);//Person { name: '张三', age: 12, sex: undefined }
b.sayHello();//张三
类jQuery 封装
jQuery 对象具有很强的集成性,可以作为函数调用,也可以做为对象调用,当作为函数调用的时候,她可以无需 new 而返回它的一个实例,很方便。
var Person = (function(window){
var Person = function(info){
return new Person.fn.init(info);
}

Person.fn=Person.prototype = {
constructor: Person,
init:function(){
this.name = info.name;
this.sayHello();
},
sayHello:function(){
console.log(this.name);
}
}
Person.fn.init.prototype = Person.prototype;
return Person;
})()

var info = {
name:'张三'
}
var a = Person(info);//张三
a.sayHello()//张三object.create();var Person = {
name: 'pawn',
sayHello: function() {
console.log(this.name);
}
}
var p = Object.create(Person);
p.sayHello();//pawn
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: