js--面向对象

脚本:缩短 编写,编译,链接,运行 过程的语言,逐行解析,简单的,难以理解的(js基于原型的面向对象)

解析型/编译型语言:前者需要解析器,后者会编译为二进制可执行文件

对象:脚本都是简单的,但其中的面向对象绝对是初学者的噩梦,不明白其中的对象规则总会数据丢失,无法接受,未定义甚至this是什么都不知道(这个真不知道...)

this.b=b; 
this.c=c;
return this; 
} 

function A2(b,c){    
var a=new Object(); 
a.b=b; 
a.c=c; 
return a; 
} 
function A3(){ } A3.prototype.a='a'; A3.prototype.b='b';

以上三种都是创建对象的方式,第一种一眼看很好理解,但也最难理解,因为this是难以确定的

第二种基于工厂,但所有属性与方法完全重新创建,方法需要写在方法体外,而写在方法体外又会很纠结

function A2(b,c){    
var a=new Object(); 
a.b=b; 
a.c=c; 
a.d=d;
return a; 
} 

function d(){
alert("fun");
}

var a=A2(1,2); //var a=new A2(1,2); 拥有d方法,但是写多了就会发现无论是看法还是写法都很不舒服

第三种基于原型,在new A3()时,所有属性赋予要创建的对象,完全无压力的解决的一二的别扭方法问题,不过创建对象怎么可以没有构造参数呢

第四种混合搭配,即以第二中的方式创建属性,在基于原型创建方法,但是高手们认为,在构造方法外创建方法是不可理喻,不够有好的方式,固有了最终的标准写法

第五种,理念与第四种一样,就是创建的位置不一样...

function Person(name){
this.name = name;
if(typeof Person._initialized == 'undefined'){
Person.prototype.say= function(){
alert(this.name);
}
}

Person._initialized = true;
}

好的,标准的构造方法就这么形成了,至于_initialized....说白了就是一个标识属性(单例,你懂得)

第六种:json...某种程度上就是js的数组和对象,所以另一种给被新手接受的方式就出来了,当然既然要以面向对象的方式考虑js,更多的使用第五种才是正解(Ext中源码多使用第五种,使用Ext的大多使用第六种,就这个区别)

必包:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。(标准答案,相当文艺,但不过白话,虽然是基于原型的面向对象,不过还是可以用java中的方式来理解),以下例子大部分为抄袭,具体地址可以度娘

function a() {
var i = 0;
function b() {
alert(++i);
}
return b;
}
var c = a();
c();
c();

此时我个人认为var c=a();与var c=new a();  是完全相同的,所返回的c都是一个b的构造函数,当然c不是对象,单纯的方法,但作为理解已经够用了

故此时a()为构造一个方法  ,里面的b()为构造这个方法的方法,换句话说java中的方法依赖于对象,js的方法是可以独立的,一切好像都明朗了,必包就是构造方法的构造函数的一种形式

途中c()对方法的执行都会使用构造方法的方法中的常量i...答案就这么简单

function f(x) {
var g = function () { return x; }
return g;
}
var h = f(1);
alert(h());

name在看到上面这个必包的时候,就可以解释为,js中构造方法的方法是可以带参数的,具体答案就是1..

所以可以这么总结,基于原型的面向对象js,不依赖于对象(或者说整个js运行的环境就在一个对象中,故感觉方法不依赖对象),具有面向对象的创建对象的方式,也有自己独有的面向对象的创建方法的方式--必包,至于必包的作用,解析型语言,解析到哪是哪,难以用类区分个个对象体,增加必包的概念以弥补不能分类创建的不足,不以对象为依赖等等,稍微想下也能明白,自由发挥,至于原理度娘吧

回调:写在脸上的东西脸上的东西最不好解释,类似于策略模式,留一个你会运行却不知道具体代码的接口,也可以解释为AOP

function a(success,failed) 
{    
//return b;
b=ture;
if(b)
    success();
else
failed(); 
} 
function success(){ 
alert("搞定"); 
} 
function failed(){ 
alert("错了"); 
} 
a(success,failed);

眼熟吧,所以猜猜监听器,事件为何在js对象外部写,内部调用?

所以,个人认为js回调与java的接口回调都是基于本身语言特点对回调函数的具体实现方式

作用域:无论怎么回避,最终还是要理解的概念,既然前面已经认为js本身就是一个巨大的对象,认为js存在一种创建方法的方法,那其中的this...究竟是什么呢?

增删改查,编程的衣食住行,最基本的要求,对js的增删改在怎么烂的底子度娘一下还是能完成的,但是查...却成了心中永远的痛byName,this...多少次徘徊在我存在的数据究竟在哪的困惑中....

写作规范:好的规范,你知道的...,依照面向对象的特点,写ext大致就是定义对象,创建对象,拼接对象这么个过程。。待续

原文地址:https://www.cnblogs.com/liuCy/p/3300247.html