利用javascript的物件導向的特性實現限制試用期

來源:互聯網
上載者:User

下邊是我自己寫的一個類,類中有欄位、方法 複製代碼 代碼如下://建構函式
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)怎麼設定到代碼裡的?難道是在我們下載類庫的時候自動添加的?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.