var x ={x:5}; var y = new Object(x); x === y; //true y._proto_ == x.prototypr; //true
y没有prototype属性,只有一个内部指针_proto_指向x的prototype属性!
结论:y的原型指向x的prototype属性。 //或者说y继承x的prototype的属性。
//静态方法
smile.book = function () {
alert('This is a book!');
};
//实例方法
smile.prototype.buy = function (name) {
alert('This is a ' + name);
};
//直接访问
smile.book(); //This is a book!
//对象实例化
var sun = new smile('Amy'); /*实现继承*/ ↑↑ smile是构造函数,方便给它一个名头:类。
实例化后,sun中一个指针(_proto_)指向smile的prototype属性!或者说sun继承它的公开方法与属性,同时可'.'访问smile中this.xxx(公开变量、函数)。
sun.buy('javascript权威指南'); //output: This is a javascript权威指南
公式:sun._proto_ = smile.prototype;
一直往_proto_往上找,直至找着为止。这就是原型链!!!
因为 JavaScript 中没有类的概念,所以 JavaScript 中的构造函数即可以看做是类,JavaScript 中 new
是构造函数的典范。
OOP中类是啥?没有类概念,姑且把构造函数当作类吧!
构造函数具体含义?继承,对象实例化,类,_proto_
JavaScript是一门解释型的语言,它并不是真正的面向对象的语言,很多面向对象的机制是需要靠模仿来实现的。
在类中用this.属性名的方式定义公有变量,var.属性名定义私有变量!!
一、模仿类定义:
function smile(x,y) {
this.box = x;
this.apple = y;
}
对象实例:
var love = new smile(2018,2019);
alert(love.box); //输出2018
二、再模仿一个简单OOP编程:
function smile(x,y,z) {
this.pear = x;
this.book = y;
this.buy = function () {
return z;
}
}
var sun = new smile(1,2,17);
alert(sun.buy()); //输出17
友情链接:https://www.jianshu.com/p/4a5170bc9afd