利用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 相关文章推荐
js 中 document.createEvent的用法
Aug 29 Javascript
jQuery 设置 CSS 属性示例介绍
Jan 16 Javascript
举例讲解Node.js中的Writable对象
Jul 29 Javascript
纯js代码实现简单计算器
Dec 02 Javascript
jquery获取img的src值的简单实例
May 17 Javascript
阿里云ecs服务器中安装部署node.js的步骤
Oct 08 Javascript
微信小程序 支付功能开发错误总结
Feb 21 Javascript
微信小程序中子页面向父页面传值实例详解
Mar 20 Javascript
什么是Vue.js框架 为什么选择它?
Oct 17 Javascript
Vue 指令实现按钮级别权限管理功能
Apr 23 Javascript
基于Vue中使用节流Lodash throttle详解
Oct 30 Javascript
微信小程序实现组件顶端固定或底端固定效果(不随滚动而滚动)
Apr 09 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下载文件的代码示例
2012/06/29 PHP
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
php魔术变量用法实例详解
2014/11/13 PHP
php中fgetcsv()函数用法实例
2014/11/28 PHP
Zend Framework教程之Zend_Db_Table用法详解
2016/03/21 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
JS backgroundImage控制
2009/05/19 Javascript
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
js中传递特殊字符(+,&)的方法
2014/01/16 Javascript
node.js中的console.error方法使用说明
2014/12/10 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
2015/03/02 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
jQuery中的siblings用法实例分析
2015/12/24 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
python之验证码生成(gvcode与captcha)
2019/01/02 Python
python将数组n等分的实例
2019/12/02 Python
QML用PathView实现轮播图
2020/06/03 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
肯尼亚网上商城:Kilimall
2016/08/20 全球购物
美国眼镜网:GlassesUSA
2017/09/07 全球购物
美国礼品卡交易网站:Cardpool
2018/08/27 全球购物
《世界多美呀》教学反思
2014/03/02 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书