JavaScript之面向对象
* 面向对象编程语言中的三大概念
+ 对象:泛指(万物皆对象)
+ 类:对象的细分
+ 实例:某一个类别中具体的事物
JS本身是面向对象编程的:JS这门语言的创建过程就是按照类和实例来创建的,JS有很多的类
数组类:Array(内置类)
+ 每一个数组都是它的实例
+ 每一个实例都是独立的个体,又自己私有的,也有一些Array提供给每一个实例的公共属性和方法
数据类型类:见到的数据值都是其所属类的一个实例
+ Number
+ String
+ Boolean
+ Symbol
+ BigInt
+ Object
+ Object
+ Array
+ Date
+ RegExp
+ ...
+ Function
DOM对象/节点或元素集合/样式对象或者集合等
+ HTMLDivElement/ HTMLAnchorElement/ HTMLUListElement ... 每一种元素对象都有一个自己的所属类
+ HTMLElement/ XMLElement ...
+ ELement/ Text/ Document ...
+ Node 节点类
+ EventTarget
+ Object
+ HTMLCollection(通过document.getElementByTagName('*')获取)/ NodeList(通过 document.querySelectorAll('*')获取) ...
+ CSSStyleDeclaration(样式类)
+ ......
--------------------------------------------------------
+ 类.prototype:存放的是给当前类的实例调用的公共属性和方法
+ 类.xxx:把其当做对象设定的静态私有属性或方法
+ ...
document.getElementById(ID)
+ 获取上下文只能是 document?
+ getElementById是在Document类原型上提供的方法,所以只有Document的实例才可以调用(document是它的实例)
[context].getElementByTagName(Tag)
+ Element类的原型上提供getElementByTagName方法
+ 每一个元素标签都是Element类的实例
+ Document的原型上也有这个方法,所以document也可以调用
+ ...
*/
function sum(x, y) {
let total = x + y;
this.total = total;
console.log(this)
return total;
}
let res = new sum(10,20);
console.log(res);
function Fn(x, y) {
let str = "自定义类";
this.total = x + y;
this.say = function(){
console.log('OK');
};
}
let f1 = new Fn(10,20);
console.log(f1.total);
console.log(f1.say);
console.log(f1.str);
let f2 = new Fn;
console.log(f1 === f2);
function Fn(){
this.x = 100;
this.y = 200;
this.getX = function(){
console.log(this.x);
}
}
Fn.prototype.getX = function(){
console.log(this.x);
}
Fn.prototype.getY = function(){
console.log(this.y);
};
let f1 = new Fn;
let f2 = new Fn;
console.log(f1.getX === f2.getX);
console.log(f1.getY === f2.getY);
console.log(f1.__proto__.getY === Fn.prototype.getY);
console.log(f1.__proto__.getX === f2.getX);
console.log(f1.getX === Fn.prototype.getX);
console.log(f1.constructor);
console.log(Fn.prototype.__proto__.constructor);
f1.getX();
f1.__proto__.getX();
f2.getY();
Fn.prototype.getY();
function fun() {
this.a = 0;
this.b = function(){
alert(this.a);
}
}
fun.prototype = {
b: function(){
this.a = 20;
alert(this.a);
},
c: function(){
this.a = 30;
alert(this.a);
}
}
var my_fun = new fun();
my_fun.b();
my_fun.c();