国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

利用javascript的面向對象的特性實現限制試用期

2019-11-20 23:43:51
字體:
來源:轉載
供稿:網友
下邊是我自己寫的一個類,類中有字段、方法
復制代碼 代碼如下:

//構造函數
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)怎么設置到代碼里的?難道是在我們下載類庫的時候自動添加的?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 萨嘎县| 广丰县| 宁阳县| 五大连池市| 奉节县| 涿州市| 彰化市| 阿荣旗| 琼海市| 娄烦县| 根河市| 砀山县| 连城县| 克什克腾旗| 忻州市| 花莲县| 永新县| 吉林市| 玉田县| 夏河县| 新竹市| 呼图壁县| 武功县| 新余市| 淮南市| 太康县| 昌图县| 库伦旗| 西盟| 盐池县| 竹北市| 新兴县| 蒙自县| 武鸣县| 全州县| 濉溪县| 彰武县| 永泰县| 桐庐县| 永川市| 石泉县|