利用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 相关文章推荐
一个可绑定数据源的jQuery数据表格插件
Jul 17 Javascript
javascript学习笔记(四) Number 数字类型
Jun 19 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
May 10 Javascript
javascript在myeclipse中报错的解决方法
Oct 29 Javascript
javascript的渐进增强与平稳退化浅谈
Nov 12 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
Mar 10 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
Jul 01 Javascript
DOM基础教程之使用DOM
Jan 19 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
Jan 20 Javascript
JavaScript定义及输出螺旋矩阵的方法详解
Dec 01 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
Apr 04 Javascript
Vue Router去掉url中默认的锚点#
Aug 01 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 flv视频时间获取函数
2010/06/29 PHP
php中过滤非法字符的具体实现
2013/10/29 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
2014/05/04 PHP
Yii2单元测试用法示例
2016/11/12 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
Mootools 1.2教程 定时器和哈希简介
2009/09/15 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
静态页面html中跳转传值的JS处理技巧
2016/06/22 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
Vue中qs插件的使用详解
2020/02/07 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
Python中Collections模块的Counter容器类使用教程
2016/05/31 Python
Python实现识别手写数字 Python图片读入与处理
2020/03/23 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
python 地图经纬度转换、纠偏的实例代码
2018/08/06 Python
iPython pylab模式启动方式
2020/04/24 Python
使用npy转image图像并保存的实例
2020/07/01 Python
Python类成员继承重写的实现
2020/09/16 Python
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
台湾线上百货零售购物平台:friDay购物
2017/08/18 全球购物
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
菲律宾优惠券网站:MetroDeal
2019/04/12 全球购物
介绍Ibatis的核心类
2013/11/18 面试题
教师思想工作总结2015
2015/05/13 职场文书
物业保洁员管理制度
2015/08/05 职场文书
初一数学教学反思
2016/02/17 职场文书
MySQL的安装与配置详细教程
2021/06/26 MySQL
Java 多态分析
2022/04/26 Java/Android