JS的prototypeapplycall
Posted 生如夏花般灿烂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS的prototypeapplycall相关的知识,希望对你有一定的参考价值。
1:原生链:prototype
儿子能够继承父亲的属性,也可以觉得遗传基因不好自己改属性,(但是不能改变老爸的属性)。
看例子:
function farther(){
this.name = "jack",
this.sex = "man",
this.age = 18;
this.cbo = function(){
console.log(this.name);
}
}
// 继承
farther.prototype = {
son:function(){
this.name = "jack-two";
// 使用自己的name和父类的sex
console.log(this.name +"\t"+ this.sex);
// 更改父类的方法。
this.cbo = function(){
console.log("cbo change.");
};
this.cbo();
}
}
new farther().cbo(); // 输出 jack
new farther().son(); // 输出jack 和 jack-two 加 man 加 cbo change.
new farther().cbo(); // 输出的值依然是 jack;子类不能更改父类属性
2:call(list) 和 apply(arry) :
用法1: 对象1.方法.call(对象2),
对象1的方法使用对象2的属性,
用法2: 对象1.call(对象2); 对象2.对象1的方法,
在对象2中使用对象1的方法。
用法不一样,效果是一样的,一个缺少方法,一个缺少属性。
为什么要把 call 和 apply 放一起呢?因为他们除了参数,其效果是一样的。
function NameShowing(sex, age) {
this.showName = function() {
console.log(this.name + "\t" + sex + "\t" + age);
}
}
function Person(name) {
this.yourCC = function(){
console.log(name)
}
this.name = name;
};
// 实例化对象
var nameShowing = new NameShowing();
var jeremy = new Person("Jeremy")
//替换this指向 jeremy
NameShowing.apply(jeremy, ["girl",18]);
jeremy.showName();
// 当然可以利用 call(this) 来联合2个对象
function cExent(name,sex,age) {
NameShowing.call(this,sex,age);
Person.call(this,name);
}
// 这会执行fobj
var c2 = new cExent("jack","man",18);
// 调用NameShowing的myName方法
c2.showName();
c2.yourCC("my name is jack"); // 输出 jack,因为实例化的时候用的是jack
以上是关于JS的prototypeapplycall的主要内容,如果未能解决你的问题,请参考以下文章
谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js