8用json做原型

上传人:第*** 文档编号:34607047 上传时间:2018-02-26 格式:DOC 页数:6 大小:31KB
返回 下载 相关 举报
8用json做原型_第1页
第1页 / 共6页
8用json做原型_第2页
第2页 / 共6页
8用json做原型_第3页
第3页 / 共6页
8用json做原型_第4页
第4页 / 共6页
8用json做原型_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《8用json做原型》由会员分享,可在线阅读,更多相关《8用json做原型(6页珍藏版)》请在金锄头文库上搜索。

1、在 Javascript 学习笔记 5类和对象中,我简单地提到了利用 JSON 去构造一个对象。代码如下:var People = name: kym,age: 21,SayHello: function () alert(Hello,My name is + this.name + .I am + this.age);alert(People.name);People.SayHello();script但是我们是不能重用这个对象的,我们如何把这个对象作为原型的呢?首先,在一个 JSON 对象有一个构造方法是不可能的了,那么我们就做一个简单的“工厂”吧,写一个方法来专门负责创建。var Peo

2、ple = Create: function (name, age) this.name = name; this.age = age;,SayHello: function () alert(Hello,My name is + this.name + .I am + this.age);People.Create(kym, 21);People.SayHello();script但是通过这个方法我们却发现,我们没有办法用 People 作为原型,让我们回顾一下:Javascript 学习笔记 7原型链的原理 这篇文章,我们想一下这个过程:var p=new People();=p._pro

3、to_=People.prototype。于是当我们p.SayHello()的时候就会去 People.prototype 中去找,结果什么都找不到。如果可以 People.prototype.SayHello=function()就可以解决这个问题。但是我们知道,只有 function 才可以有 prototype。那么我们想想之前的推导公式,怎么样能让 p.SayHello()呢?如果可以p._proto_=People 就好了。那么我们想个办法:既然在 new 的时候,某个对象的_proto_只能等于某个函数的 prototype,我们设置一个函数 X,令 p._proto_=X.pro

4、totype,我们再令 X.prototype=People。这样的关系是这样: var People = Create: function (name, age) this.name = name;this.age = age;,SayHello: function () alert(Hello,My name is + this.name + .I am + this.age);var X = function () ;X.prototype = People;var p = new X();p.Create(kym, 21);p.SayHello();script这样就相当于用 X 做了

5、一个中间变量,使得我们可以访问 JSON 对象的内部属性。但是这样是不是不太优雅呢?我们每次创建一个对象时,都需要来写这样一个辅助的函数。那好,我们就把这个过程封装起来:var Factory = CreatePeople : function (className,name,age) var temp = function () className.Create(name, age);temp.prototype = className;var result = new temp();return result;var people = Factory.CreatePeople(People

6、,kym,21);people.SayHello();但是这样也有一个缺点,就是每次我增加一个类,就需要向 Factory 里注册一个新方法,这样是很麻烦的,我在很久以前的 玩转方法:call 和 apply 中说过关于 call 和 apply 的区别,因为这里的参数不固定,我们不可能一一列举,因此我们在这里可以用 apply 来改善这个方法:var People = Create: function (name, age) this.name = name; this.age = age;,SayHello: function () alert(Hello,My name is + thi

7、s.name + .I am + this.age);var Factory = Create: function (className, params) var temp = function () className.Create.apply(this, params);temp.prototype = className;var result = new temp();return result;var people = Factory.Create(People,kym,21);people.SayHello();script这样,一个完整的创建类就诞生了!那么我们每次创建“类”时就都可以用 JSON 来做了,然后用户每次都统一来调用 Factory.Create()就可以了!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号