利用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 相关文章推荐
JavaScript入门教程(12) js对象化编程
Jan 31 Javascript
DOM_window对象属性之--clipboardData对象操作代码
Feb 03 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
Aug 30 Javascript
jquery ui resize 中border-box的bug修正
Apr 26 Javascript
jQuery解析Json实例详解
Nov 24 Javascript
原生JavaScript制作微博发布面板效果
Mar 11 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
May 10 Javascript
JavaScript实现数组降维详解
Jan 05 Javascript
微信小程序 css使用技巧总结
Jan 09 Javascript
Webpack执行命令参数详解
Jun 17 Javascript
微信小程序仿微信运动步数排行(交互)
Jul 13 Javascript
微信小程序scroll-x失效的完美解决方法
Jul 18 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 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
PHP clearstatcache()函数详解
2010/03/02 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
关于js与php互相传值的介绍
2013/06/25 PHP
php返回json数据函数实例
2014/10/09 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
php文件压缩之PHPZip类用法实例
2015/06/18 PHP
jQuery 方法大全方便学习参考
2010/02/25 Javascript
JQuery 常用操作代码
2010/03/14 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
Node.js 路由的实现方法
2019/06/05 Javascript
javascript实现贪吃蛇游戏(娱乐版)
2020/08/17 Javascript
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python插入排序算法实例分析
2015/07/03 Python
python提取包含关键字的整行数据方法
2018/12/11 Python
Python元组知识点总结
2019/02/18 Python
使用python实现kNN分类算法
2019/10/16 Python
jupyter notebook运行命令显示[*](解决办法)
2020/05/18 Python
巴西网上药房:onofre
2016/11/21 全球购物
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
六十大寿答谢词
2014/01/12 职场文书
高中生期末评语
2014/01/28 职场文书
优秀班集体获奖感言
2014/02/03 职场文书
经典而简洁的婚礼主持词
2014/03/13 职场文书
美术课外活动总结
2014/07/08 职场文书
大学生安全责任书
2014/07/25 职场文书
项目投资合作意向书
2014/07/29 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
中班下学期幼儿评语
2014/12/30 职场文书
学生退学证明
2015/06/23 职场文书
Java Socket实现Redis客户端的详细说明
2021/05/26 Redis
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
2022/06/14 MySQL