JavaScript的原型链概念,发现没有一个统一的表述或者定义,都是通过举例子,打比方来表述,感觉不精确也不合理,所以这里研究一下.
我对原型链的定义
在JavaScript中,每一个实例对象都有一个私有属性__proto__,这个__proto__指向它的构造函数的原型对象,该原型对象又有自己的原型对象,层层链接,形成原型链.
关于原型链的一些问题
1. JavaScript的类
类是创建对象的模板.
(1) es6的类
es6中类提供了class原生API,它同样是基于原型的类.
(2) es5的类
es5中的类没有原生API,以下几种方法构造类.
>1 构造函数法
var Person = function(name, age) {
this.name = name;
this.age = age;
};
Person.prototype.sayHello = function() {
alert(this.name);
}
var p = new Person('s', 123);
复制代码
>2 Object.create法
var Cat = {
name: 'Tom',
age: 3,
color: 'black',
foot: 4,
makeSound: function () {
alert("喵喵")
},
sayName: function () {
alert(this.name)
}
}
var c = Object.create(Cat);
c.sayName();
复制代码
>3 极简主义法
荷兰程序员的方法
首先,它也是一个对象模拟类。在这个类里面,定义一个构造函数createNew()用来生成实例。
var Cat = {
createNew :function(){
var cat = {}
cat.name = 'Tom'
cat.makeSound = function(){
alert("喵喵")
}
cat.sayName = function(){
alert(this.name)
}
return cat
}
}
// 得到类的实例
var cat1 = Cat.createNew();
复制代码
类的继承
只需要在子类的createNew方法中调用父类的createNew方法即可
// 父类
var Animal = {
createNew: function(){
var animal = {};
animal.sleep = function(){ alert("睡懒觉"); };
return animal;
}
};
// 子类
var Cat = {
createNew: function() {
var cat = Animal.createNew()
cat.name = 'Tom'
cat.makeSound = function(){
alert("喵喵")
}
cat.sayName = function(){
alert(this.name)
}
return cat
}
}
var cat1 = Cat1.createNew()
cat1.sleep()// 睡懒觉
复制代码
私有属性
例如上面代码子类Cat的name属性就是私有的,外部获取不了,只能通过子类的内部方法获取.
var cat1 = Cat1.createNew()
cat1.name //undefined
复制代码
数据共享
如果需要多个类的实例共享同一个数据,则放在类对象里面,createNew的同级即可实现.
var Cat = {
sound: "喵喵"。
createNew: function(){
var cat = {}
cat.makeSound = function(){
alert(Cat.sound)
}
cat.changeSound = function(x){
Cat.sound = x
}
return cat
}
}
var cat1 = Cat.createNew()
var cat2 = Cat.createNew()
cat1.makeSound() // 喵喵
复制代码
2. JavaScript的继承实现
JavaScript的类实现有哪几种方式,继承怎么实现
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END