My Coroutine Don't work in other class, why?

using UnityEngine;
using System.Collections;

public class ChickSpawner : MonoBehaviour
{
    public GameObject[] prefabs;
    public float spawnRate = 0.35f;
    Spwaner spawner;

    void Start()
    {
        spawner = new Spwaner(this.transform, prefabs, spawnRate);
        StartCoroutine(spawner.startSpawn());
    }
}
using UnityEngine;
using System.Collections;

public class Spwaner:MonoBehaviour
{
    public Transform parent;
    public GameObject[] prefabs;
    public float spawnRate;


    public Spwaner(Transform _parent, GameObject[] _prefabs, float _spawnRate)
    {
        this.parent = _parent;
        this.prefabs = _prefabs;
        this.spawnRate = _spawnRate;
    }

    public Spwaner()
    {

    }

    public int getRandomIndex()
    {
        int randomIndex = Random.Range(0, prefabs.Length);
        return randomIndex;
    }

    public IEnumerator startSpawn()
    {
        GameObject go = Instantiate(prefabs[getRandomIndex()]) as GameObject;
        go.transform.SetParent(parent);
        yield return new WaitForSeconds(spawnRate);
        StartCoroutine(startSpawn());
    }

    public IEnumerator stopSpawn()
    {
        StopCoroutine(startSpawn());
        yield return null;
    }
}

My startSpawn cannot call startSpawn. Why?

You’re creating a component with a constructor. Use AddComponent instead.

    void Start()
    {
        spawner = this.gameObject.AddComponent<Spwaner>();
        spawner.prefabs = prefabs;
        spawner.spawnRate = spawnRate;
        StartCoroutine(spawner.startSpawn());
    }

i try this and this work, but it look strange, is that what you mean?

        public IEnumerator startSpawn()
        {
            while (true)
            {
                GameObject go = Instantiate(prefabs[getRandomIndex()]) as GameObject;
                go.transform.SetParent(parent);
                yield return new WaitForSeconds(spawnRate);
            }
        }

Give that a whirl.