㈠ 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解密工具吧,加密就是防止源码被盗用,你得好好找找工具!