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

时间: 2024-10-28 23:59:01

利用javascript的面向对象的特性实现限制试用期_javascript技巧的相关文章

详解JavaScript基于面向对象之创建对象(2)_javascript技巧

接着上文<详解JavaScript基于面向对象之创建对象(1)>继续学习. 4.原型方式        我们创建的每个函数都有一个通过prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法.逻辑上可以这么理解:prototypt通过条用构造函数而创建的那个对象的原型对象.使用原型的好处就是可以让所有对象实例共享它所包含的属性和方法.也就是说,不必在构造函数中定义对象信息,而是直接将这些信息添加到原型中.        原型方式利用了对象的pr

关于JavaScript的面向对象和继承有利新手学习_javascript技巧

这是一篇关于JavaScript的面向对象和继承的文章,写于1年前,作者循序渐进,对想学习JavaScript中面向对象的同学来说是很有帮助的,因此试着翻译一下,不妥之处,请指正.原文链接Objects and Inheritance in Javascript 虽然一些Javascript用户可能永远也不需要知道原型或面向对象语言的性质,但是那些来自传统面向对象的语言的开发者使用的时候会发现JavaScript的继承模型非常的奇怪.而不同的JS框架提供了各自的方法来编写类面向对象(class-

详解JavaScript基于面向对象之创建对象(1)_javascript技巧

这一次我们深入的学习一下JavaScript面向对象技术,在学习之前,必要的说明一下一些面向对象的一些术语.这也是所有面对对象语言所拥有的共同点.有这样几个面向对象术语: 一.对象       ECMA-262把对象(object)定义为"属性的无序集合,每个属性存放一个原始值.对象或函数".严格来说,这意味着对象是无特定顺序的值的数组.尽管ECMAScript如此定义对象,但它更通用的定义是基于代码的名词(人.地点或事物)的表示.二.类        每个对象都由类定义,可以把类看做

利用JavaScript脚本实现滚屏效果的方法_javascript技巧

许多制作网页的朋友常常制作公告板.信息窗,也经常为了实现整版页面和图像的滚屏显示而烦恼,不用着急,这里有一个简单的方法来实现滚屏显示.我们没有采用Java的.class程序来实现,也不是动态DHTML语言,只是充分地利用了JavaScript脚本语言的一些函数,写一些简短的JavaScript脚本语言就可实现这一功能.   原代码如下: <html> <head> <script language="Javascript"> <!--//防止错

利用javascript实现web页面中指定区域打印_javascript技巧

最近做到了web页面课程表打印时,上网找了一些资料,最后使用了下面的方法实现了我需要的功能.将需要打印的课程表的table放入div标签中,然后指定出需要打印的区域,最后调用window.print打印指定内容. 示例代码(代码中有些内容已省略) 复制代码 代码如下: function preview() {    bdhtml = window.document.body.innerHTML;    sprnstr = "<!--startprint-->";    ep

浅谈JavaScript中面向对象的的深拷贝和浅拷贝_javascript技巧

理解深拷贝和浅拷贝之前需要弄懂一些基础概念,内存中存储的变量类型分为值类型和引用类型. 1.值类型赋值的存储特点, 将变量内的数据全部拷贝一份, 存储给新的变量. 例如:var num = 123 :var num1=num; 表示变量中存储的数字是 123.然后将数据拷贝一份,就是将 123 拷贝一份. 那么内存中有 2 个 数组;将拷贝数据赋值给 num2,其特点是在内存中有两个数据副本.这可以理解为浅拷贝. 2.引用类型的赋值. var o={name:'张三'}: var obj=o;

利用javascript实现一些常用软件的下载导航_javascript技巧

将下面的代码保存为jb51.html 复制代码 代码如下: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>javascript 播放器下载导航测试</title> </head> <body> <div id="divcontent&q

JavaScript创建对象的方式小结(4种方式)_javascript技巧

本文实例总结了JavaScript创建对象的方式.分享给大家供大家参考,具体如下: 潜意识里,JavaScript不能算是面向对象的语言,要算也只能说是趋向面向对象的一种语言,至少它不能很好的吻合面向对象最基本的三大特性(继承.封装.多态),当然有很多人就认为JavaScript是面向对象语言,好像也说得没错,因为面向对象也能在JavaScript中实现,比如说继承.封装吧也都可以在JavaScript中实现,但是实现方便吗?所以我觉得很疑惑.看到网上有一网友评价的很好,"面向对象只是一种思想,

JavaScript实现Java中Map容器的方法_javascript技巧

本文实例讲述了JavaScript实现Java中Map容器的方法.分享给大家供大家参考,具体如下: 声明一下,JavaScript和Java的区别就像雷锋和雷峰塔的区别. 在Java中,Map是一种集合,用来存储Key-Value键值对的容器.根据键得到值,因此不允许键重复(重复了的覆盖),但允许值重复.JavaScript中的对象特性,就是不允许有相同的属性存在,和Java的Map非常的相似,所以可以利用这个特性在JavaScript中来实现Map容器,实现基本的增删查的操作. functio