昨天,学了一些关于JS的东西,现在就来谈谈我的感想以及收获。
1.JS的特性
一看到JS的全名javascript,我就不由自主的把它与之前学过的一门语言Java作比较,但事实证明,他俩除了名字上都有java,其他地方根本一点相似之处都没有,
javascript是一个脚本语言,没有自己的环境,而java是一门编程语言,有自己的编译环境,javascript嵌入在html语言中,为它增加了互动和交互。
2.JS的面向对象
这些天看的主要内容全在这,上文也说过,java和js除了名字相似其他并没有什么相似之处,面向对象时也是如此:
(1)封装
Javascript是一种基于对象的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程语言,因为它的语法中没有class;所以利用了function代替class(我是这么认为的),下面看一段代码:
function x(name) {
var name = "you";
this._name=name;
}
x.prototype.say=function () {
document.write("I've got "+this._name+" in my sight</br>");
}
var p=new x();
p.say();
这是js中最简单的一种封装,一目了然,只要利用function创建一个类(暂且说类)再利用prototype为其赋上相应的方法,之后只要实例化对象即可使用。但其缺点也很明显:无法保证内部成员的安全性,任何在此js文件中的代码皆可访问到该函数本应该是私有的成员,于是,就有了下面这段代码:
(function(){ //这里类似于java中的private
var name = "you";
function x(name) {
this._name=name;
}
x.prototype.say=function () {
document.write("I've got "+this._name+" in my sight</br>");
}
window.x=x; //创建一个对外的接口
}());
这样由于name是匿名函数的成员,于是它便成为了不可访问元素,这样通过外加一个匿名函数的形式很好的保证了数据的安全性。
3.JS中的继承
先来看一段代码
(function () {
function y(name) {
this._name=name;
}
y.prototype=new x(); //这里继承
var supersay=y.prototype.say;
y.prototype.say=function () {
supersay.call(this);
document.write("No "+this._name+" can hide from my sight</br>");
}
window.y=y;
}());
类y通过prototype说明了y是由x继承而来的,是x的子类,但同时,y也可以通过call(this)函数调用父类的方法。
//经验值+10 获得JS小菜鸡称号