博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用javascript的面向对象的特性实现限制试用期
阅读量:6656 次
发布时间:2019-06-25

本文共 3053 字,大约阅读时间需要 10 分钟。

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

 

      Javascript是一种面向对象的脚本语言,其也具有面向对象的三大特性,但是今天我们不详细的讲解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());

     

      我们都知道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();

      

      那我们在实例化的代码后边新定义一个构造器会怎么样呢?

     

        
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的解释器会自下向上查找类的定义,当找到第一个类的定义(参数可以不同)就会进行执行并停止继续查找;
      到现在要实现限制试用期好像有点眉目了,我们根据时间的不同,只要我们可以控制其不能执行正确的构造函数就可以实现

     

       
//
构造函数
        
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() {  };                    
             
        };

     

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

     

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

      

 

        也许你回觉得这个太没有技术含量了,那么我们在比较大的项目中我们可以进行代码混淆、进行代码转义,同时函数定义和实例化根本不在同一个文件中!

        

         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)怎么设置到代码里的?难道是在我们下载类库的时候自动添加的?

 

 

转载于:https://www.cnblogs.com/wufengtinghai/archive/2011/08/04/2126792.html

你可能感兴趣的文章
对sssp项目搭建的补充,总错误处理。
查看>>
花(cnm加强)
查看>>
SQL Server取datetime的日期部分
查看>>
sqlserver 访问oracle
查看>>
三,对于printf函数和C语言编程的初步拓展
查看>>
Centos7更改主机名
查看>>
1004. 成绩排名 (20)
查看>>
用正则检测密码 比如 必须包含 大写 小写字母 数字 长度最小6位
查看>>
Mybatis 向statement传入多个参数
查看>>
个人总结
查看>>
WITH AS 的使用
查看>>
EasyUI-DataGrid之批量删除
查看>>
vue运行原理
查看>>
读书笔记 effective c++ Item 35 考虑虚函数的替代者
查看>>
AForge.NET是一个专门为开发者和研究者基于C#框架设计的视频录像
查看>>
git分支操作
查看>>
成功的7问、7思、7念、7醒
查看>>
Zynq-7000 FreeRTOS(二)中断:Timer中断
查看>>
第23条:请不要在新代码中使用原生态类型
查看>>
SQL中部分语法整理
查看>>