利用javascript的面向对象的特性实现限制试用期


Posted in Javascript onAugust 04, 2011

下边是我自己写的一个类,类中有字段、方法

//构造函数 
function Person(name,sex,age) { 
this.name = name; 
this.sex = sex; 
this.age = age; 
}; 
Person.prototype.getName = function () { 
return this.name; 
}; 
Person.prototype.getSex=function(){ 
return this.sex; 
}; 
Person.prototype.getAge=function(){ 
return this.age; 
}; 
Person.prototype.setName = function (name) { 
this.name = name; 
}; 
Person.prototype.setAge = function (age) { 
this.age = age; 
}; 
Person.prototype.setSex = function (sex) { 
this.sex = sex; 
}; 
Person.prototype.getDescription = function () { 
return "我是 " + this.getName() + ",性别 " + this.getSex()+ ",年龄 " + this.getAge(); 
};

下边我们实例化这个类并调用其方法
var person = new Person("无风听海", "男", 20); 
alert(person.getDescription());

利用javascript的面向对象的特性实现限制试用期

      我们都知道javascript是一种弱类型的动态语言,在javascript是没有函数重载的概念的,但是我们完全可以在同一文件(命名空间)中定义不同参数的构造器。如下我定义了数个构造函数

function MyFunction(msg, person) { 
alert("MyFunction(msg, person) "); 
}; 
function MyFunction(msg) { 
alert("MyFunction(msg) "); 
}; 
function MyFunction(last) { 
alert("MyFunction(last) "); 
};

那么我们实例化的时候会执行那个构造函数呢?
var mf = new MyFunction();

利用javascript的面向对象的特性实现限制试用期
那我们在实例化的代码后边新定义一个构造器会怎么样呢?
function MyFunction(msg, person) { 
alert("MyFunction(msg, person) "); 
}; function MyFunction(msg) { 
alert("MyFunction(msg) "); 
}; 

function MyFunction(last) { 
alert("MyFunction(last) "); 
}; 
var mf = new MyFunction(); 
function MyFunction(lastlast) { 
alert("MyFunction(lastlast) "); 
};

利用javascript的面向对象的特性实现限制试用期
      从以上结果我们可以判定,在给定的范围内,当我们实例化对象时,javascript的解释器会自下向上查找类的定义,当找到第一个类的定义(参数可以不同)就会进行执行并停止继续查找;
      到现在要实现限制试用期好像有点眉目了,我们根据时间的不同,只要我们可以控制其不能执行正确的构造函数就可以实现
//构造函数 
function Person(name,sex,age) { 
this.name = name; 
this.sex = sex; 
this.age = age; 
}; 
Person.prototype.getName = function () { 
return this.name; 
}; 
Person.prototype.getSex=function(){ 
return this.sex; 
}; 
Person.prototype.getAge=function(){ 
return this.age; 
}; 
Person.prototype.setName = function (name) { 
this.name = name; 
}; 
Person.prototype.setAge = function (age) { 
this.age = age; 
}; 
Person.prototype.setSex = function (sex) { 
this.sex = sex; 
}; 
Person.prototype.getDescription = function () { 
return "我是 " + this.getName() + ",性别 " + this.getSex()+ ",年龄 " + this.getAge(); 
}; 
var person = new Person("无风听海", "男", 20); 
alert(person.getDescription()); 
if ((new Date().getTime() / 1000) - 1279890171 > 31556859) { 
function Person() { }; 
};

利用javascript的面向对象的特性实现限制试用期

      这里我们也正常弹出了对话框,那么我们可以稍微更改一下函数getDescription,来模拟复杂的业务数据处理

Person.prototype.getDescription = function () { 
return "我是 " + this.getName().toString() + ",性别 " + this.getSex().toString() + ",年龄 " + this.getAge().toString(); 
};

利用javascript的面向对象的特性实现限制试用期
也许你回觉得这个太没有技术含量了,那么我们在比较大的项目中我们可以进行代码混淆、进行代码转义,同时函数定义和实例化根本不在同一个文件中!
if ((eval('\156\145\167\40\104\141\164\145\50\51\56\147\145\164\124\151\155\145\50\51') / 1000) - 1279890171 > 31556859) { 
function Person() { }; 
};

唯一令我困惑的地方就是上面这段代码的其计时的起始时间(1279890171)怎么设置到代码里的?难道是在我们下载类库的时候自动添加的?
Javascript 相关文章推荐
游戏人文件夹程序 ver 3.0
Jul 14 Javascript
jquery复选框CHECKBOX全选、反选
Aug 30 Javascript
解析jquery中的ajax缓存问题
Dec 19 Javascript
js时间比较示例分享(日期比较)
Mar 05 Javascript
Bootstrap组件(一)之菜单
May 11 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
Sep 01 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
Jun 02 Javascript
JavaScript 点击触发复制功能实例详解
Nov 02 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
Jan 27 jQuery
JavaScript中构造函数与原型链之间的关系详解
Feb 25 Javascript
vue-cli3配置与跨域处理方法
Aug 17 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
Jul 17 Javascript
jquery动态加载图片数据练习代码
Aug 04 #Javascript
jquery里的正则表达式说明
Aug 03 #Javascript
基于jQuery的图片剪切插件
Aug 03 #Javascript
jQuery + Flex 通过拖拽方式动态改变图片的代码
Aug 03 #Javascript
JavaScript 一道字符串分解的题目
Aug 03 #Javascript
JavaScript中去掉数组中的重复值的实现方法
Aug 03 #Javascript
JavaScript 大数据相加的问题
Aug 03 #Javascript
You might like
php !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
2011/01/07 PHP
php截取字符串函数分享
2015/02/02 PHP
php实现图片上传并进行替换操作
2016/03/15 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
Laravel6.18.19如何优雅的切换发件账户
2020/06/14 PHP
jquery ajax执行后台方法
2010/03/18 Javascript
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
2011/04/27 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
js获取UserControl内容为拼html时提供方便
2014/11/02 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
Javascript中的作用域和上下文深入理解
2015/07/03 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
使用JavaScript获取Request中参数的值方法
2016/09/27 Javascript
使用JS读取XML文件的方法
2016/11/25 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
Node接收电子邮件的实例代码
2017/07/21 Javascript
node+koa2+mysql+bootstrap搭建一个前端论坛
2018/05/06 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
vue实现自定义多选按钮
2020/07/16 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
python实现桌面气泡提示功能
2019/07/29 Python
Python的缺点和劣势分析
2019/11/19 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
2019/11/22 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
Python中格式化字符串的四种实现
2020/05/26 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
为什么UNION ALL比UNION快
2016/03/17 面试题
杭州西湖英语导游词
2015/02/03 职场文书
教师工作证明范本
2015/06/12 职场文书
实习证明格式范文
2015/06/16 职场文书
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android