利用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 ui css framework
Jun 28 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
Jan 29 Javascript
jQuery获取单击节点对象的方法
Jun 02 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
Dec 02 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
Mar 09 Javascript
JS模拟超市简易收银台小程序代码解析
Aug 18 Javascript
vue组件初学_弹射小球(实例讲解)
Sep 06 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
Oct 20 Javascript
浅谈vue中使用图片懒加载vue-lazyload插件详细指南
Oct 23 Javascript
jQuery实现标签子元素的添加和赋值方法
Feb 24 jQuery
JS实现点击按钮随机生成可拖动的不同颜色块示例
Jan 30 Javascript
vue element-ui之怎么封装一个自己的组件的详解
May 20 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
模仿OSO的论坛(二)
2006/10/09 PHP
个人站长制做网页常用的php代码
2007/03/03 PHP
thinkphp模板用法和内容输出实例
2014/11/28 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
PHP文件上传类实例详解
2016/04/08 PHP
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
Javascript实现DIV滚动自动滚动到底部的代码
2012/03/01 Javascript
jQuery之按钮组件的深入解析
2013/06/19 Javascript
HTTP 304错误的详细讲解
2013/11/13 Javascript
javascript中clipboardData对象用法详解
2015/05/13 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
JSON字符串和对象相互转换实例分析
2016/06/16 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
vue动态生成dom并且自动绑定事件
2017/04/19 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
2019/02/20 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
python实现网页链接提取的方法分享
2014/02/25 Python
Python脚本实现虾米网签到功能
2016/04/12 Python
Python多继承顺序实例分析
2018/05/26 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
Champion官网:美国冠军运动服装
2017/01/25 全球购物
世界上最大的糖果店:Dylan’s Candy Bar
2017/11/07 全球购物
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
医药个人求职信范文
2014/01/29 职场文书
给公司的建议书范文
2014/05/13 职场文书
幸福中国演讲稿
2014/09/12 职场文书
2014年家长学校工作总结
2014/11/20 职场文书