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

js 高级开发:对象属性prototype,自定义命名空间,自定义继承,闭包封装

2018-01-19 09:24 686 查看
<script>
/*
自定义命名空间
*/
function namespace(namespaceString) {
var temp = [];//声明了一个空的数组
var array = namespaceString.split(".");
for (var i = 0; i < array.length; i++) {
temp.push(array[i]);
/**
* 把多个json对象添加了window上
*/
eval("window." + temp.join(".") + "={}");
//把多个function添加到了window上
//eval("window."+temp.join(".")+"=function(){}");
}
}

/*
引入包
*/
namespace("pj.js.extend");//引用继承方法
namespace("PJ.fn");
namespace("PJ.fn.init");

/*
自定义继承
*/
pj.js.extend = function(destination, source) {
if (typeof destination == "object") {//destination是一个json对象
if (typeof source == "object") {//source是一个json对象
//把source中的每一个key,value值赋值给destination
for ( var i in source) {
destination[i] = source[i];
}
}
}
if (typeof destination == "function") {
if (typeof source == "object") {
for ( var i in source) {
destination.prototype[i] = source[i];
}
}
if (typeof source == "function") {
destination.prototype = source.prototype;
}
}
return destination;
}

function Entity() {
}
Entity.prototype.id = 1;

function Model() {
}

//Model继承Entity
pj.js.extend(Model, Entity);

Model.prototype.name = "张三";

var mm = new Model();
console.log(mm.id);
console.log(mm.name);

//闭包:匿名函数 案例1
(function(num) {
console.log(num);
})(3);

//闭包:案例2

function PJEntity(idp, namep) {
var id = idp;
var name = namep;
};

(function(window, id, name) {

PJEntity.prototype = {
doing : function(fn) {
console.log("正在做");
},
asking : function(fn) {
console.log("正在说");
},
}

var PJ = function() {
return new PJEntity(1, "pj---001");
};
window.PJ = PJ;

})(window);
var pj = window.PJ();
pj.doing();
pj.asking();
</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: