zoukankan      html  css  js  c++  java
  • 利用javascript的面向对象的特性实现限制试用期

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


     

  • 相关阅读:
    log4j2 标签解析
    7.3
    work-7.2
    爬取豆瓣上某个用户标记的想读的或者读过的图书信息
    python爬虫程序打包为exe程序并在控制台下运行
    爬取任意两个用户在豆瓣上标记的想读的图书信息的交集
    解决c# progressBar更新出现界面假死
    数据库死锁(大神请路过)
    Excel的下载和读取,部分代码(大神请路过)
    大数据缓存:redis
  • 原文地址:https://www.cnblogs.com/wufengtinghai/p/2126792.html
Copyright © 2011-2022 走看看