js 原型和call()总结

/*
原型也是一个对象
把共有的属性或者方法放在原型中
*/

//Person.prototype 原型
/*Person.prototype = { } 祖先*/
Person.prototype.name = "这是祖先的名称 ";
/*多个属性可以这样定义*/
Person.prototype = {
    age : 20,
    sex :"女",
    constructor : Car
}
/*构造函数*/
function Person(sex){
    this.sex =sex;
}

function Car() {
}

/*子孙类可以继承父类的属性和方法,但是子类对象不能修改父类的对象的属性,只能自己进行操作才可以实现
也就是说person.name= "这是祖先的名称 "
*/
 var person = new Person();
/*constructor是对象的构造函数*/
console.log(person.constructor)


Animal.prototype.name = "这是个动物的类";
function Animal() {

    /*这里可以理解为放对象没有这个属性的时候才会去原型中查找,其中也可以改变原型的指向*/
//    var this ={
//     _proto_ : Animal.prototype
// }
}

var animal = new Animal();

//其中注意一下两种写法
Animal.prototype.name = " 这是另外一个动物的类";   //打印Animal.prototype.name = " 这是另外一个动物的类";这个可以这样理解修改的是属性

Animal.prototype = {
    name : " 这是另外一个动物"
}
// Animal.prototype.name = " 这是个动物的类";

/*创建对象*/
var obj = Object.create(原型);


/*call 和apply的作用*/
function Person1(name, age) {
    /*其中这里的this == object*/
    this.name = name;
    this.age = age;
}

/*这里的Student调用Person1的函数*/
function Student (name, age ,grade) {
    /*Person1.apply(this , [name, age]);*/
    Person1.call(this ,name,age);
    this.grade =grade;
}

var student = new Student('JJJJJ',20,1);


var person1 = new Person1('ZK',100);
var object = {

}
/*call的作用是:改变this的指向*/
Person1.call(object ,'zhe',52);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来回答你的问题。以下是一些JS原型继承和原型链的面试题及其答案: 1. 什么是原型继承? 答:原型继承是通过将一个对象的原型作为另一个对象的原型来实现继承。在JS中,每个对象都有一个原型,它可以通过__proto__属性来访问。 2. 什么是原型链? 答:原型链是一种通过原型继承来实现对象间继承关系的机制。当我们访问一个对象的属性时,JS会首先在该对象自身查找,如果没有找到,就会在它的原型对象上查找,如果还没有找到,就会在原型对象的原型对象上查找,一直到Object.prototype对象为止,这个查找的过程就是原型链。 3. 如何实现一个简单的原型继承? 答: ```javascript function Person(name) { this.name = name; } Person.prototype.sayHi = function() { console.log('Hi, my name is ' + this.name); } function Student(name, grade) { Person.call(this, name); this.grade = grade; } Student.prototype = Object.create(Person.prototype); Student.prototype.constructor = Student; Student.prototype.sayGrade = function() { console.log('My grade is ' + this.grade); } var tom = new Student('Tom', 3); tom.sayHi(); tom.sayGrade(); ``` 4. 如何判断一个对象是否是另一个对象的实例? 答:可以使用instanceof运算符来判断,例如: ```javascript var obj = {}; console.log(obj instanceof Object); // true ``` 5. 如何判断一个属性是在对象自身定义的还是继承自原型? 答:可以使用JS提供的hasOwnProperty方法来判断,例如: ```javascript var obj = {}; console.log(obj.hasOwnProperty('toString')); // false console.log(Object.prototype.hasOwnProperty('toString')); // true ``` 希望这些问题和答案能够帮助你更好地理解JS原型继承和原型链。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值