㈠ javaScript原型,原型鏈 有什麼特點
1.1 一切皆為對象
JavaScript里所有的東西都是對象. 對象是屬性的集合. 數字, 字元串, 布爾值等原始值是"偽對象", 它們同樣擁有屬性, 但是是在棧上分配並按值傳遞. 而其他的對象是堆上分配並按引用傳遞.
一個很重要的概念是,函數也是對象, 能夠作為變數的值, 返回值, 參數或者屬性的值. 函數對象特殊的地方是能通過"xxx()"語法執行包含在xxx函數對象內的代碼. 因為這一特殊性, typeof xxx 將會返回function, 但這只是一種便利設施.
1.2 對象的屬性可以動態添加和刪除
varfoo=newObject();
//為foo對象添加bar屬性
foo.bar="foobar";
alert(foo.bar);//foobar
//刪除foo對象的bar屬性
deletefoo.bar;
alert(foo.bar);//undefined
1.3 除了宿主對象, 其它對象皆由構造函數創建
要有對象, 就先要有創建對象的方法.
在C++/Java等語言, 這個方法就是實例化XXX類的一個實例xxx.
而在JavaScript的世界裡實際沒有類的東西, 當然仍然可以用"類"和"實例"等慣用語來描述JavaScript中類似的行為, 但其機制是完全不同的. JavaScript的對象是由構造函數創建的, 每個對象都有constructor屬性表示創建該對象的構造函數:
functionTest(){this.a="hello";}
vartest=newTest();//由Test構造函數創建
alert(test.constructor);
varo={a:"hello"};
//實際相當於
varo_=newObject();
o_.a="hello";//由Object構造函數創建
alert(o.constructor);
構造函數也是對象, 那構造函數是由什麼創建? 內建的Function函數:
functionTest(a, b)
{
alert(a+b);
}
//相當於:
Test=newFunction(["a","b"],"alert(a+b);");
Function函數又是由什麼創建? 實際上Function是本機代碼實現的固有對象. 不過為了一致性, Function也有constructor屬性, 該屬性指向它自己. 接上面的代碼:
/*輸出functionFunction(){
[nativecode]
}
*/
alert(Test.constructor);
alert(Test.constructor.constructor===Test.constructor);//true
alert(Test.constructor===Object.constructor);//true
2 原型prototype
2.1 prototype的概念
prototype是構造函數的一個屬性, 該屬性指向一個對象. 而這個對象將作為該構造函數所創建的所有實例的基引用(base reference),可以把對象的基引用想像成一個自動創建的隱藏屬性. 當訪問對象的一個屬性時, 首先查找對象本身, 找到則返回; 若不, 則查找基引用指向的對象的屬性(如果還找不到實際上還會沿著原型鏈向上查找, 直至到根).只要沒有被覆蓋的話, 對象原型的屬性就能在所有的實例中找到.
原型默認為Object的新實例, 由於仍是對象, 故可以給該對象添加新的屬性:
//prototype默認為newObject();為了方便, 記為p_obj
functionPerson(name){
this.name=name;
}
//為p_obj增加sayName屬性
Person.prototype.sayName=function(){
alert(this.name);
}
varjohn=newPerson("John");//john的basereference指向p_obj
vareric=newPerson("Eric");//eric的basereference也是指向p_obj
//注意sayName代碼中的this將指向實例化後的對象(this綁定)
john.sayName();//john對象本身沒有sayName屬性,於是訪問原型對象p_obj的sayName屬性
eric.sayName();//訪問同一個原型對象p_obj的sayName屬性
vartmp=Person.prototype;
tmp.boss="David";
//於這個運行點,p_obj已經被修改
//根據上述屬性訪問流程,新的修改(boss屬性)能反映到所有的實例,包括已經創建和即將創建的
alert("John'sbossis"+john.boss);
alert("Eric'sbossis"+eric.boss);
//hisCar和sayCar屬性將增加到john對象而不是p_obj對象..
john.hisCar="Audi";
john.sayCar=function(){
alert(this.name+"hasacarof"+this.hisCar);
}
john.sayCar();
//..因此下一句將錯誤,因為eric對象本身和原型p_obj都沒有sayName屬性
/*eric.sayCar();*/
2.2 原型鏈
除了能修改prototype指向的對象, 還能修改prototype指向哪一個對象, 即為prototype賦予一個不同的對象. 這可以實現一種簡單的繼承:
functionSuperman(){}
Superman.prototype.sayHello=function(){
alert("I'masuperman.");
}
functionSupermanCan(skill){
this.skill=skill;
}
//為prototype賦予Superman的實例..
SupermanCan.prototype=newSuperman();
//..再動態添加新的屬性
SupermanCan.prototype.sayMore=function(){
this.sayHello();//調用"父類"的方法
alert("Ican"+this.skill);
}
vardavid=newSupermanCan("fly");
//output:I'masuperman.Icanfly
david.sayMore();
如果先實例化出一個對象, 再為構造函數prototype賦予一個不同的對象, 將會: 已經創建的對象的基引用不變, 將來創建的對象的基引用為新的原型對象:
varf1={echo:function(){alert("sound");}};
functionFoo(){};
varfoo=newFoo();//foo的基引用指向Object實例
Foo.prototype=f1;
/*未定義,因為這是"foo對象自己或者基引用指向的對象有echo屬性嗎?"
而不是"foo對象自己或者Foo.prototype指向的對象有echo屬性嗎?"*/
alert(foo.echo);
varfoo2=newFoo();//foo2的基引用指f1對象
foo2.echo();//output:sound
所有的構造函數的prototype都不能為空, 就是說Superman.prototype = null 會被解釋引擎無視; 另一方面, Object構造函數也有prototype屬性(該屬性是只讀的, 可以為原型增加屬性,但不能賦予不同的對象), 故因此可以有多層的原型鏈, 但原型鏈的根必定會是Object.prototype . 這意味著給Object.prototype增加屬性影響到所有對象:
Object.prototype.echo=function(){
alert("hello");
}
//echo屬性將增加到所有對象固有對象和自定義對象
vararr=newArray();
arr.echo();
Array.echo();
functionObjCons(){
this.mmy="d";
}
varobj=newObjCons();
obj.echo();
ObjCons.echo();
3. 構造函數和new的實質
構造函數是一個地地道道的函數, 一個函數之所以能成為構造函數, 是因為new運算符:
this.msg="window";
functionTest()
{
alert(this.msg);
}
Test();//window
vartest=newTest();//undefined.因為test對象沒有定義msg屬性
二者區別在於如何切入對象: Test() 在某個對象(例子中為window)的上下文上執行代碼, 即this指向這個對象; new Test()創建一個新對象, 並以這個新的對象為上下文(this指向新對象)執行代碼, 然後返回這個新對象.
假如有個函數:
functionTest(){
varmmy="havemoney";
this.wish=mmy;
doSomeThing();
}
結合以上的所有論述, 可以推測new Test()行為的偽代碼表示為:
創建一個新對象temp;
temp.constructor = Test;
temp.(base reference) = Test.prototype; // 這一句先於代碼體執行, 意味著構造函數里的this.xxx能訪問原型對象的屬性xxx
bind: this=temp; //將this綁定到temp對象
// 開始執行函數代碼
var mmy = "have money";
this.wish = mmy; // 為temp對象添加wish屬性
doSomeThing();
....
// 結束執行函數代碼
return temp;
這個未必會符合內部的二進制實現, 但卻能很好地解釋了JavaScript的特性.
㈡ 那個大哥能幫小弟做一下下面的題我做了不對,請用java和python幫我做一下我看看是那裡不懂。
1. What are difference between a set of web pages and a web applications ? What technologies are currently available for the creation of such applications ?
網頁與網頁應用程序在於,網頁只是單一的靜態頁面.而網頁應用程序是一些服務的集合.
當前流行的創建Web應用程序的技術有. 前端:Html+CSS+javascript. XML
後台:PHP,JSP,ASP,Perl,Python,Ruby.
2. How does Javascript compare with other technologies that are available for use on client browsers?
JavaScript主要用來操作瀏覽器DOM給網頁提供動態與交互.
3. Outline the structure of a Javascript program
4. Can JavaScript be executed without using a web browser.
可以, 現在也有很多的JavaScript解釋器Shell.
5. What is the difference between a variable and a value ? How should variables be named ?
變數可以存儲值,值是字面量.變數可以改變.可以被賦值.可以通過關鍵字var聲明變數.
6. What data types does JavaScript use ?
JavaScript的簡單類型包括數字,字元串,布爾值(true和false),null值和undefined值.其他所有的值都是對象.數字,字元串和布爾值」貌似」對象,因為它們擁有方法,但是它們是不可變的.JavaScript中的對象是可變的鍵控集合(Keyed collections).在Javascript中,數組是對象,函數是對象,正則表達式,當然,對象自然也是對象.
7. What are scoping rules – why are they so important in all programming languages ?
在編程語言中,作用域控制著變數與參數的可見性及生命周期.對程序員來說這是一個重要的幫助
因為他減少了名稱沖突,並且提供了自動內存管理.
8. Why do some functions return values to the calling statement ?
因為調用函數的作用有些是為了求值!
9. How does JavaScript create HTML pages on the fly ?
什麼是Fly?
10. Write a simple JavaScript that adds some numbers together, concatenating a couple of strings and then shows the result in an alert() dialog and on the page.
<html><body>
<script>
var a = 10;
var b = 20;
function add(var a,var b){
var result = a+b;
return result;
}
var sum=add(a,b);
alert(""+a+" + "+b+"="+sum);
</script>
</body></html>
㈢ html代碼中加js會彈出為保護安全性,以限制此網頁運行可訪問計算機腳本。。。如何取消限制JS
flyskey001 正解,是IE瀏覽器的安全機制所致,在本地調試時才會彈出,無論源碼如何寫都一樣會彈出,但放到網站上讓別人訪問是不會彈出的.在本地的IIS環境下執行也不會彈出
要不你直接換瀏覽器調試得了,只要不是IE核心的瀏覽器,就不會彈出這個
㈣ Cesium 50個實例集合,講解、分析(內附源碼)
為方便快速測試 Cesium Demo使用,添加了一些演示demo並且提供了webpack打包的示例。目前整理了20個demo,後面會對demo進行講解。
詳情源碼連接:
Cesium 50個實例集合,講解、分析(內附源碼)
示例概要說明:
1.Draw.js 動態繪制 點、線、面
2.Scanning.js 一個簡單的掃描功能
3.Spline.js 樣條插值
4.HeightProperty.js 一個類似淹沒分析的效果
5.VectorTile.js 矢量切片載入
6.Ellipsoids.js 圓特效
7.Sensor.js 感測器,可設置角度,位置等
8.PolylineArrow.js 動態線效果
9.VolumesCZML.js 載入czml文件 支持感測器等動畫特效
10.VolumesApi.js VolumesApi 調用效果
11.Fly.js 繞點飛行
12.Radar.js 氣象雷達動態圖
13.VisibleAnalysis.js 通視分析
14.EagleEye.js 鷹眼地圖
15.Measure.js 測量
16.Translucency.js 地球半透明,可做地下管線、礦山項目
17.Interior.js 地球內部,結合VectorTile.js會出很牛的效果
18.3dtiles載入
19.可視域分析_3DTiles
20.站心坐標轉WGS84
操作說明:
1.npm初始化第三方庫
npm install
2.在根目錄創建文件夾,文件夾名稱為「ThirdParty」 。
3.將根目錄下「node_moles\cesium\Build\Cesium」拷貝到「ThirdParty」 下。
4.編譯
npm run build
5.運行
npm run start
註:可以不要「2」、「3」步驟的,只是為了初學者能更快的找到源碼位置。
㈤ 為什麼jquery.fly.js在iso動作慢
㈥ 請問這個JS怎樣解密
這是加密過的PHP代碼,你去找PHP解密工具吧,加密就是防止源碼被盜用,你得好好找找工具!