利用javascript的面向?qū)ο蟮奶匦詫?shí)現(xiàn)限制試用期
//構(gòu)造函數(shù)
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();
};
下邊我們實(shí)例化這個(gè)類并調(diào)用其方法
var person = new Person("無(wú)風(fēng)聽海", "男", 20);
alert(person.getDescription());
我們都知道javascript是一種弱類型的動(dòng)態(tài)語(yǔ)言,在javascript是沒有函數(shù)重載的概念的,但是我們完全可以在同一文件(命名空間)中定義不同參數(shù)的構(gòu)造器。如下我定義了數(shù)個(gè)構(gòu)造函數(shù)
function MyFunction(msg, person) {
alert("MyFunction(msg, person) ");
};
function MyFunction(msg) {
alert("MyFunction(msg) ");
};
function MyFunction(last) {
alert("MyFunction(last) ");
};
那么我們實(shí)例化的時(shí)候會(huì)執(zhí)行那個(gè)構(gòu)造函數(shù)呢?
var mf = new MyFunction();

那我們?cè)趯?shí)例化的代碼后邊新定義一個(gè)構(gòu)造器會(huì)怎么樣呢?
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) ");
};

從以上結(jié)果我們可以判定,在給定的范圍內(nèi),當(dāng)我們實(shí)例化對(duì)象時(shí),javascript的解釋器會(huì)自下向上查找類的定義,當(dāng)找到第一個(gè)類的定義(參數(shù)可以不同)就會(huì)進(jìn)行執(zhí)行并停止繼續(xù)查找;
到現(xiàn)在要實(shí)現(xiàn)限制試用期好像有點(diǎn)眉目了,我們根據(jù)時(shí)間的不同,只要我們可以控制其不能執(zhí)行正確的構(gòu)造函數(shù)就可以實(shí)現(xiàn)
//構(gòu)造函數(shù)
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("無(wú)風(fēng)聽海", "男", 20);
alert(person.getDescription());
if ((new Date().getTime() / 1000) - 1279890171 > 31556859) {
function Person() { };
};
這里我們也正常彈出了對(duì)話框,那么我們可以稍微更改一下函數(shù)getDescription,來(lái)模擬復(fù)雜的業(yè)務(wù)數(shù)據(jù)處理
Person.prototype.getDescription = function () {
return "我是 " + this.getName().toString() + ",性別 " + this.getSex().toString() + ",年齡 " + this.getAge().toString();
};

也許你回覺得這個(gè)太沒有技術(shù)含量了,那么我們?cè)诒容^大的項(xiàng)目中我們可以進(jìn)行代碼混淆、進(jìn)行代碼轉(zhuǎn)義,同時(shí)函數(shù)定義和實(shí)例化根本不在同一個(gè)文件中!
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() { };
};
唯一令我困惑的地方就是上面這段代碼的其計(jì)時(shí)的起始時(shí)間(1279890171)怎么設(shè)置到代碼里的?難道是在我們下載類庫(kù)的時(shí)候自動(dòng)添加的?
- Javascript基于對(duì)象三大特性(封裝性、繼承性、多態(tài)性)
- JavaScript實(shí)現(xiàn)多態(tài)和繼承的封裝操作示例
- JavaScript使用prototype原型實(shí)現(xiàn)的封裝繼承多態(tài)示例
- JavaScript 繼承 封裝 多態(tài)實(shí)現(xiàn)及原理詳解
- Javascript 面向?qū)ο筇匦?/a>
- javascript面向?qū)ο蟪绦蛟O(shè)計(jì)高級(jí)特性經(jīng)典教程(值得收藏)
- javascript 的面向?qū)ο筇匦詤⒖?/a>
- js面向?qū)ο笾?、私有、靜態(tài)屬性和方法詳解
- js面向?qū)ο笾R妱?chuàng)建對(duì)象的幾種方式(工廠模式、構(gòu)造函數(shù)模式、原型模式)
- javascript 面向?qū)ο缶幊袒A(chǔ) 多態(tài)
- JavaScript面向?qū)ο笾甈rototypes和繼承
- JavaScript面向?qū)ο笕齻€(gè)基本特征實(shí)例詳解【封裝、繼承與多態(tài)】
相關(guān)文章
js實(shí)現(xiàn)簡(jiǎn)單的點(diǎn)名器隨機(jī)色實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于js實(shí)現(xiàn)簡(jiǎn)單的點(diǎn)名器隨機(jī)色的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
javascript 實(shí)現(xiàn)雙擊才能打開鏈接的方法
javascript 實(shí)現(xiàn)雙擊才能打開鏈接的方法...2007-08-08
js實(shí)現(xiàn)簡(jiǎn)易計(jì)算器小功能
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)簡(jiǎn)易計(jì)算器小功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
javascript 隨機(jī)抽獎(jiǎng)程序代碼
javascript 隨機(jī)抽獎(jiǎng)程序代碼,主要是利用了js的Math.random方法。需要的朋友可以參考下。2009-11-11
Javascript實(shí)現(xiàn)圖片懶加載插件的方法
最近由于公司項(xiàng)目需要,要利用Javascript實(shí)現(xiàn)圖片懶加載效果,嘗試起來(lái)發(fā)現(xiàn)并不難,于是將自己的實(shí)現(xiàn)過程分享出來(lái)給大家學(xué)習(xí)和參考,希望對(duì)有需要的朋友們帶來(lái)一定的幫助,感興趣的朋友們下面來(lái)一起看看吧。2016-10-10
js多級(jí)樹形彈出一個(gè)小窗口層(非常好用)實(shí)例代碼
js多級(jí)樹形彈出一個(gè)小窗口層(非常好用)實(shí)例代碼,需要的朋友可以參考一下2013-03-03
Json對(duì)象和字符串互相轉(zhuǎn)換json數(shù)據(jù)拼接和JSON使用方式詳細(xì)介紹(小結(jié))
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式.這篇文章主要介紹了Json對(duì)象和字符串互相轉(zhuǎn)換json數(shù)據(jù)拼接和JSON使用方式詳細(xì)介紹(小結(jié))的相關(guān)資料,需要的朋友可以參考下2016-10-10

